使用列表更新 SQL Server 数据库
Posted
技术标签:
【中文标题】使用列表更新 SQL Server 数据库【英文标题】:Update SQL Server database using a list 【发布时间】:2018-04-22 04:02:00 【问题描述】:我正在尝试更新 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 test = item.ToString();
test = test.Replace('"', ' ').Trim();
cmd.Parameters.AddWithValue("@SeatNumber", test);
cmd.ExecuteNonQuery();
它一直说变量@SeatNumber
已被声明并且仅更新列表中的第一项。有什么方法可以解决这个问题?
更新:
我只是将 foreach 循环放在了 using 之外,它就可以工作了。
【问题讨论】:
因为您在构建字符串的 foreach 循环的每个迭代中都添加了 @seatnumber .. 【参考方案1】:您正在尝试创建一个 inlist,但使用了一个相等运算符,说 Where SeatNumber = @SeatNumber"
,而您应该使用一个 IN
运算符,如
Where SeatNumber IN (@SeatNumber)
同样,这不是正确的方法,您应该将这些 inlist 值填充到 DataTable
并将其作为 DbType.Structured
传递
【讨论】:
【参考方案2】:这是因为您已经将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();
【讨论】:
【参考方案3】:每次都需要启动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()
【讨论】:
【参考方案4】:您可以添加一个更清晰的参数行以使其运行。
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();
【讨论】:
【参考方案5】:我只是将 foreach 循环放在了 using 之外,它就可以工作了。
【讨论】:
以上是关于使用列表更新 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章
从SQL Server将数据导入SharePoint 2010
从 sql server 获取选定的值到 php 中的下拉列表