变量X在被声明之前已被使用

时间:2016-03-13 20:59:15

标签: vb.net

我不确定为什么我会从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'在被赋值之前使用。在运行时可能会产生空引用异常。
感谢任何帮助

1 个答案:

答案 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应仅用于可能因开发人员的过错而导致异常的代码。向命令添加参数不会这样做,但实际的数据库交互可以。