错误:变量名称在查询批处理或存储过程中必须是唯一的

时间:2014-01-20 14:37:33

标签: vb.net sql-server-2008

我成功从我的数据库中检索了所有数据,但每当我第二次尝试时,发生了一个错误,说已经声明了变量名@uid ..

这些是我的代码。我每次使用它时都处理我的sqlcommandbuilder并关闭我的datareader ..但是仍然没有运气在我的代码中找到错误..请帮助我..而且每当我保存和更新我的数据库上的数据..它总是成功的首先尝试..但在第二次尝试..它得到相同的错误“变量名称在查询批处理或存储过程中必须是唯一的。”

    Sub fillDataFields()
    Dim arrImage As Byte()

    con.Open()
    comm.CommandText = "Select last_name + ', ' + first_name + ' ' + middle_name as name,course, section, address, " & _
                   "birthday, picture from Users where user_id like @uid"
    comm.Connection = con
    comm.Parameters.AddWithValue("@uid", "" & frmUsers.ListView1.SelectedItems(0).Text & "%")
    dr = comm.ExecuteReader
    While (dr.Read())
        arrImage = dr.Item("picture")
        Dim mstream As New System.IO.MemoryStream(arrImage)
        txtCourse.Text = (dr("course"))
        txtSection.Text = (dr("section"))
        richtxtAddress.Text = (dr("address"))
        txtBirthday.Text = (dr("birthday"))
        txtName.Text = (dr("name"))
        PictureBox1.Image = Image.FromStream(mstream)
    End While
    con.Close()
    dr.Close()
    comm.Dispose()
End Sub

1 个答案:

答案 0 :(得分:2)

您的命令对象仍然附加了参数,因此您应该确保创建对象的新实例并在完成后正确处理它们:

con = New Connection("connection string here")
con.Open()
comm = New Command
comm.CommandText = "command text here"

然后在你完成它之后处理掉它:

comm.Dispose
con.Close
con.Dispose

更好地将它包装在Using块中,因为这样可以确保它被丢弃:

Using con As New Connection("your connection String Here"), comm as New Command
    con.Open()
    comm.CommandText = "command text here"
    ...
    ...
    con.Close
End Using 'con and comm objects are disposed here

附注:我建议将Command对象重命名为cmd,以使其看起来与Connection对象不相似。