我不确定为什么我会从Visual Studio收到以下代码的警告:
Dim cmd As SqlCommand
cmd.Parameters.AddWithValue("@password", pw.tostring)
Try
myconn.open
cmd = New SqlCommand("UPDATE Customers SET PW2=@password WHERE ID=@id", myconn)
这是我得到的警告信息:
严重级代码说明项目文件行抑制状态
警告BC42104变量' Cmd'在被赋值之前使用。在运行时可能会产生空引用异常。
感谢任何帮助
答案 0 :(得分:3)
您正在访问cmd:
的Parameters属性 Dim cmd As SqlCommand
cmd.Parameters.AddWithValue("@password", pw.tostring) ' <== You can't use cmd yet!
在try:
中实例化它之前 Try
myconn.open
' This is where you are instantiating the object instance:
cmd = New SqlCommand("UPDATE Customers SET PW2=@password WHERE ID=@id", myconn)
如果更改为此,则可以使用:
Dim cmd As SqlCommand
cmd = New SqlCommand("UPDATE Customers SET PW2=@password WHERE ID=@id", myconn)
' You could combine the two above lines into one like this:
'Dim cmd As New SqlCommand("UPDATE Customers SET PW2=@password WHERE ID=@id", myconn)
cmd.Parameters.AddWithValue("@password", pw.tostring)
Try
myconn.open
这也更好,因为只有myconn.open
指令应该在Try / Catch中,因为它是唯一可以导致异常的行。 Try / Catch应仅用于可能因开发人员的过错而导致异常的代码。向命令添加参数不会这样做,但实际的数据库交互可以。