我尝试更新SQL Server数据库并拥有一个字符串列表,这些字符串是座位号
editTextName = (EditText) view.findViewById(R.id.editTextInformationName);
editTextName.setText("Name here",TextView.BufferType.EDITABLE);
它一直说已经声明了变量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();
}
}
,并且只更新了列表中的第一项。如何解决这个问题?
更新:
我只是把foreach循环放在了使用之外,它可以工作。
答案 0 :(得分:3)
您正在尝试制作一个inlist,但使用等于运算符Where SeatNumber = @SeatNumber"
,您应该使用IN
运算符,如
Where SeatNumber IN (@SeatNumber)
同样,这不是正确的方法,而是应该将这些列表值填充到DataTable
并将其作为DbType.Structured
传递
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
我只是把foreach循环放在了使用之外,它可以工作。
答案 3 :(得分:0)
每次都需要启动SqlCommand参数。在您的代码中,您使用SQLCommand仅首次执行查询,并使用列表中的第一项更新您的表。在下一次迭代期间,由于sqlcommand仍保留最后一个值(查询以更新列表中的上一项),因此会引发错误。正确的方法如下:
"RNFS.DocumentDirectoryPath"
答案 4 :(得分:0)
您可以添加一个更清晰的参数行以使其运行。
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();
}