C# 使用列表更新SQL Server数据库
我正在尝试更新SQL Server数据库,并有一个字符串列表,这些字符串是座位号C# 使用列表更新SQL Server数据库,c#,tsql,dao,C#,Tsql,Dao,我正在尝试更新SQL Server数据库,并有一个字符串列表,这些字符串是座位号 string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber"); using (SqlCommand cmd = new SqlCommand(strQuery, con)) { con.Open(); foreach (var item in list) {
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
con.Open();
foreach (var item in list) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
}
}
它一直说变量@SeatNumber
已经声明,只更新列表中的第一项。有没有办法解决这个问题
更新:
我只是把foreach循环放在using外部,它就可以工作了 您试图创建一个inlist,但使用了一个相等运算符,表示
Where SeatNumber=@SeatNumber”
Where as,您应该使用IN
运算符,如
Where SeatNumber IN (@SeatNumber)
同样,这不是正确的方法,相反,您应该将这些inlist值填充到
数据表中,并将其作为DbType.Structured
传递,而不是您尝试创建一个inlist,但使用一个等式操作符,即Where SeatNumber=@SeatNumber”
Where as,您应该使用IN
之类的操作符
Where SeatNumber IN (@SeatNumber)
同样,这不是正确的方法,而是应该将这些inlist值填充到DataTable
中,并将其作为DbType.Structured
传递,因为您已经将CommandParameter
添加到SqlCommand
中,并且再次将其添加到循环中
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
con.Open();
foreach (var item in list) {
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
}
}
这是因为您已经将CommandParameter
添加到SqlCommand
中,并且再次将其添加到循环中
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
con.Open();
foreach (var item in list) {
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
}
}
我只是将foreach循环放在using之外,它就工作了。我只是将foreach循环放在using之外,它就工作了。您每次都需要启动SqlCommand参数。在您的代码中,您仅第一次使用SQLCommand执行查询,并且它使用列表中的第一项更新您的表。在下一次迭代中,由于sqlcommand仍然保留最后一个值(查询以更新列表中的上一项),因此会抛出一个错误。正确的方法如下:
try{
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
con.Open();
foreach (var item in list) {
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
}
}
}
finally{ con.Close() }
每次都需要启动SqlCommand参数。在您的代码中,您仅第一次使用SQLCommand执行查询,并且它使用列表中的第一项更新您的表。在下一次迭代中,由于sqlcommand仍然保留最后一个值(查询以更新列表中的上一项),因此会抛出一个错误。正确的方法如下:
try{
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
con.Open();
foreach (var item in list) {
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
}
}
}
finally{ con.Close() }
您可以再添加一个清晰的参数行以使其运行
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
con.Open();
foreach (var item in list) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
您可以再添加一个清晰的参数行以使其运行
string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
using (SqlCommand cmd = new SqlCommand(strQuery, con)) {
con.Open();
foreach (var item in list) {
string test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
因为您在构建字符串的foreach循环中添加了@seatnumber每个元素..因为您在构建字符串的foreach循环中添加了@seatnumber每个元素。。