2013-07-18 40 views
0

运行foreach循环后。我在第二个项目上收到NullReferenceException,因为查询结果为空。但是我有更多的项目用于相同的查询并在richTextBox1上获取结果。所以如果有任何空结果,我可以继续foreach循环。NullReferenceException被捕获...?

foreach (string Items in listBox4.Items) 
{ 
    using (OracleCommand crtCommand = new OracleCommand("select REGEXP_REPLACE(dbms_metadata.get_ddl('TABLE','" + Items + "'),('" + txtSrcUserID.Text + "...'),'', 1, 0, 'i') from dual", conn1))       
    { 
     richTextBox1.AppendText(Environment.NewLine); 
     richTextBox1.AppendText(crtCommand.ExecuteScalar().ToString() + ";"); 
     richTextBox1.AppendText(Environment.NewLine); 
    }              
} 
+4

您有一个SQL注入漏洞。 – SLaks

回答

0

这是危险的编程

object dbResult = crtCommand.ExecuteScalar(); 
    if(dbResult == null) 
    { 
    richTextBox1.AppendText(";"); 
    } 
    else 
    { 
    richTextBox1.AppendText(dbResult.ToString() + ";"); 
    } 

:这是逻辑上等同于。你真的应该检查null。假设你的循环会变得更大..我会包括一个continue,并使它更加明显,你为了可读性而做的是什么。如果你不需要它,省略continue

var result = crtCommand.ExecuteScalar(); 

if (result != null) { 
    richTextBox1.AppendText(Environment.NewLine); 
    richTextBox1.AppendText(result.ToString() + ";"); 
    richTextBox1.AppendText(Environment.NewLine); 
} 
else { 
    continue; 
} 

// any other code here. 
+0

谢谢你的答案。 – user2593362

0

更改crtCommand.ExecuteScalar().ToString()(crtCommand.ExecuteScalar() ?? string.Empty).ToString()。如果你想完全忽略一个空的结果,而不是把它当作一个空字符串,使用@ SimonWhitehead的代码

+0

你可能想解释一下?运营商。 –

+0

@TheGreatCO http://msdn.microsoft.com/en-us/library/ms173224.aspx – smartcaveman

+0

我从PHP到C#,我从来没有遇到过?运营商直到最近,所以我不认为每个人都有。 –