2012-11-19 31 views
0

wpf应用程序其实我创建帐户应用程序我去显示打开amt。开放等于dr_amt-cr_amt。 dr_amt和cr_amt是AMT表的列名在那里我可以做在运行时使用未分配的局部变量

double a, b, c; 

SqlConnection con = new SqlConnection("my conn"); 

SqlCommand cmd = new SqlCommand("select sum(dr_amt),sum(cr_amt) from amt where id='"+tex1.Text+"'", con); 


con.Open(); 

SqlDataReader dr = cmd.ExecuteReader(); 

while (dr.Read()) 

{ 
    a = Convert.ToDouble(dr[0]); 
    b = Convert.ToDouble(dr[1]); 
} 
c = a - b; 

textBox3.Text =Convert.ToString(c); 

在bulid这个代码,我看到未分配的本地variable'a”和‘B’的错误使用我该怎么办

回答

2

在bulid这个代码我看到错误使用未分配的本地变量'a'和'b'

是的,你会这样做。他们没有明确分配,因为您的while循环可能无法执行。

如果没有行,你会期望结果是什么?这个问题的答案将决定你应该做什么。 (另外,如果有更多多行,只有最后一行将有助于结果 - 是故意的?)

例如,您可以只是给他们价值观入手:

double a = 0, b = 0, c; 

如果没有行,那会给你0的结果。如果这是你想要的...

(我迟,你可以,你要知道声明的变量。)

此外,使用参数化的SQL。您目前的代码容易受到SQL injection attacks的影响。哦,并使用using语句来确保您正确地关闭命令和异常。

+0

Jon的建议(与您的代码的SQL注入漏洞相关)由[Jeff Atwood在他的博客上]解释(http://www.codinghorror.com/blog/2005/04/give-me-parameterized -SQL-或放弃的我,death.html)。请按照他的建议! –

+0

可以编写代码以获取帮助 – user1464596

+0

@ user1464596:好吧,我给了你*一个*代码片段......但是你真的应该仔细阅读这些建议,然后尝试自己关注它。如果我只是提供代码,你下次学习的可能性就会降低。 –

0

您需要设置a和b,因为while循环在dr中没有数据时甚至不会执行一次迭代。

double a = 0, b = 0, c;