如何通过每次迭代重用SqlCommand参数?我正在尝试为我的数据库实现一个简单的删除按钮。事件方法看起来像这样:privatevoidbtnDeleteUser_Click(objectsender,EventArgse){if(MessageBox.Show("Areyousure?","deleteusers",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning)==DialogResult.OK){命令=新的SqlCommand();尝试{User.connection.Open();command.Connection=User.connection;command.CommandText="DELETEFROMtbl_UsersWHEREuserID=@id";内部标志;foreach(dgvUsers.SelectedRows中的DataGridViewRow行){intselectedIndex=row.Index;introwUserID=int.Parse(dgvUsers[0,selectedIndex].Value.ToString());命令.Parameters.AddWithValue("@id",rowUserID);flag=command.ExecuteNonQuery();if(flag==1){MessageBox.Show("成功!");}dgvUsers.Rows.Remove(行);}}catch(SqlExceptionex){MessageBox.Show(ex.Message,Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Information);}最后{如果(ConnectionState.Open.Equals(User.connection.State))User.connection.Close();}}else{返回;}}但我得到这个消息:已声明变化@id变量名称在查询批处理或存储过程中必须是唯一的。有没有办法重用这个变量?Parameters.AddWithValue向命令添加一个新参数。由于您是在同名循环中执行此操作,因此您会得到异常“变量名必须是唯一的”。所以你只需要一个参数,把它加在循环之前,并且只在循环内部改变它的值。command.CommandText="DELETEFROMtbl_UsersWHEREuserID=@id";命令.Parameters.Add("@id",SqlDbType.Int);内部标志;foreach(dgvUsers.SelectedRows中的DataGridViewRow行){intselectedIndex=row.Index;introwUserID=int.Parse(dgvUsers[0,selectedIndex].Value.ToString());命令.Parameters["@id"].Value=rowUserID;//...}另一种方法是使用命令。参数。清除();第一的。然后,您还可以在循环中添加参数,而无需两次创建相同的参数。而不是:command.Parameters.AddWithValue("@id",rowUserID);使用类似的东西:System.Data.SqlClient.SqlParameterp=newSystem.Data.SqlClient.SqlParameter();在循环内部手动设置:p.ParameterName="@ID";p.Value=rowUserID;该错误是因为您在循环的每次迭代中重复添加相同的参数。我会将该代码移到一个单独的方法中,以便我可以根据需要从任意多个地方调用它。publicboolDeleteUser(intuserId){stringconnString="yourconnectionstring";尝试使用(varconn=newSqlConnection(connString)){使用(varcmd=newSqlCommand()){cmd.Connection=conn;cmd.CommandType=CommandType.Text;cmd.CommandText="DELETEFROMtbl_UsersWHEREuserID=@id";cmd.Parameters.AddWithValue("@id",userId);conn.Open();cmd.ExecuteNonQuery();返回真;}}}catch(Exceptionex){//在此处记录错误以进行调试returnfalse;}}然后这样调用上面是C#学习教程:HowtoreuseSqlCommandparametersthrougheachiteration?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注—if(dgvUsers[0,selectedIndex]!=null){introwUserID=int.Parse(dgvUsers[0,selectedIndex].Value.ToString());varresult=DeleteUser(rowUserID)}else{//获取不到ID。Showerrormessagetouser}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
