【问题标题】:Variable X has been used before it's been declared变量 X 在声明之前已被使用
【发布时间】:2016-03-13 20:59:14
【问题描述】:

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您正在访问 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 应该只用在那些不会因为开发人员的错误而导致异常的代码周围。向命令添加参数不会这样做,但实际的数据库交互可以。

    【讨论】:

    • 哇,谢谢你的回答。我从这么少的代码中学到了很多东西:D ps:一旦它允许我,我会接受作为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多