Vb.net 变量名'@用户ID2';已经申报了。变量名在查询批处理或存储过程中必须是唯一的
这是我第一次在这里问问题。我正在从事一个项目,在这个项目中,我必须更新一个表,并使用事务将其插入另一个表中 事务块的插入部分将来自所选gridview行的内容 我得到的错误是: 已声明变量名“@userid2”。变量名在查询批处理或存储过程中必须是唯一的 如何解决此错误 这是我的代码:Vb.net 变量名'@用户ID2';已经申报了。变量名在查询批处理或存储过程中必须是唯一的,vb.net,Vb.net,这是我第一次在这里问问题。我正在从事一个项目,在这个项目中,我必须更新一个表,并使用事务将其插入另一个表中 事务块的插入部分将来自所选gridview行的内容 我得到的错误是: 已声明变量名“@userid2”。变量名在查询批处理或存储过程中必须是唯一的 如何解决此错误 这是我的代码: Protected Sub btnmodifyaccessdepot_Click(sender As Object, e As EventArgs) Handles btnmodifyaccessdepot.
Protected Sub btnmodifyaccessdepot_Click(sender As Object, e As EventArgs) Handles btnmodifyaccessdepot.Click
Using con As New SqlConnection(ConString)
con.Open()
Dim sqlTran As SqlTransaction = con.BeginTransaction()
Dim command As SqlCommand = con.CreateCommand()
command.Transaction = sqlTran
Try
command.CommandText = "UPDATE Rhema_TechnicalAccess set Active=@Active,Requester= @Requester,Approver=@Approver,Issuer=@Issuer where userid=@userid"
command.Parameters.AddWithValue("@Active", lblactiveadd.Text)
command.Parameters.AddWithValue("@Requester", lblrequesterAdd.Text)
command.Parameters.AddWithValue("@Approver", lblapproveradd.Text)
command.Parameters.AddWithValue("@Issuer", lblisssueradd.Text)
command.Parameters.AddWithValue("@Userid", lblselecteduserid.Text)
command.ExecuteNonQuery()
For Each row As GridViewRow In gridadddepot.Rows
If row.RowType = DataControlRowType.DataRow Then
Dim chkdepots As CheckBox = DirectCast(row.FindControl("chkdepots"), CheckBox)
If chkdepots.Checked Then
Dim lbldepot As TextBox = DirectCast(row.FindControl("lbldepot"), TextBox)
command.CommandText = "INSERT INTO Rhema_TechnicalAccessDepot VALUES(@userid2,@Depot,@Access,@TechnicalAccessID)"
command.Parameters.AddWithValue("@userid2", lblselecteduserid.Text)
command.Parameters.AddWithValue("@Depot", lbldepot.text)
command.Parameters.AddWithValue("@Access", lbluseraccessAdd.Text)
command.Parameters.AddWithValue("@technicalaccessid", lbltechnicalaccessid.Text)
End If
End If
Next
command.ExecuteNonQuery()
sqlTran.Commit()
lblmessage2.Text = "Both records were written to database."
Catch ex As Exception
lblmessage2.Text = ex.Message
Try
sqlTran.Rollback()
Catch exRollback As Exception
lblmessage2.Text = exRollback.Message
End Try
End Try
End Using
End Sub
您应该为每个循环创建
外部的第一个参数,然后在循环内部为其添加值。正如JohnyL所写,您应该在循环之前使用适当的新SqlParameter
构造函数创建参数,记住声明字符串的大小,并更改循环内部每个参数的.Value。另外,请避免AddWithParameter:像这样的代码是在编写代码时不清楚应该做什么的结果。不仅需要将参数的创建和添加移到循环外部,还需要将ExecuteNonQuery
调用移到循环内部。每次遍历网格的所有行并更改参数,然后在最后一次更改后只调用ExecuteNonQuery
一次,这有什么意义?为什么只插入最后一行?更好的选择是用所有数据填充DataTable
,然后创建一个数据适配器并适当设置其InsertCommand
。然后,只需调用一次Update
,即可保存该批次。例如,.@jmcilhinney,请您为我编辑代码,以获得我想要的结果。我是一个迷路的新手。非常感谢你