2016-03-13 177 views
0

之前,我不知道为什么我越来越从Visual Studio的警告下面的代码:变量X已被使用,它已经宣布

Dim cmd As SqlCommand 
cmd.Parameters.AddWithValue("@password", pw.tostring) 
Try 
      myconn.open 
      cmd = New SqlCommand("UPDATE Customers SET [email protected] WHERE [email protected]", myconn) 

这是警告消息,我得到: 严重级代码说明项目文件行抑制状态 警告BC42104在为其指定值之前使用变量“Cmd”。运行时可能会导致空引用异常。
感谢所有帮助

回答

3

您正在访问CMD的参数属性:

Dim cmd As SqlCommand 
cmd.Parameters.AddWithValue("@password", pw.tostring) ' <== You can't use cmd yet! 

您在尝试实例化之前:

Try 
     myconn.open 

     ' This is where you are instantiating the object instance: 
     cmd = New SqlCommand("UPDATE Customers SET [email protected] WHERE [email protected]", myconn) 

如果你改变这一点,它会工作:

Dim cmd As SqlCommand 
cmd = New SqlCommand("UPDATE Customers SET [email protected] WHERE [email protected]", myconn) 

' You could combine the two above lines into one like this: 
'Dim cmd As New SqlCommand("UPDATE Customers SET [email protected] WHERE [email protected]", myconn) 

cmd.Parameters.AddWithValue("@password", pw.tostring) 

    Try 
     myconn.open 

这也更好,因为只有myconn.open指令应该在Try/Catch中,因为它是唯一可能导致异常的行。 Try/Catch应该仅用于可能通过开发人员的错误导致异常的代码。向命令添加参数不会那样做,但实际的数据库交互可以。

+0

谢谢你的答案。我从这么小的代码中学到了很多东西:D ps:一旦它让我接受答案 – Quattro

相关问题