【发布时间】:2019-04-09 19:10:48
【问题描述】:
当我传递列表的字符串版本时,我的代码没有从测试数据库表中返回任何行,但如果我直接传递列表成员,它确实返回行。
当我使用消息框显示字符串joinedSerialsList 时,它的格式似乎正确。
// Create comma delimited list of serials:
int currentSerial = beginning;
List<string> serialsList = new List<string>();
for (int i = 0; i < count; i++)
{
serialsList.Add(currentSerial.ToString());
currentSerial++;
}
string joinedSerialsList = string.Format("({0})", string.Join(", ", serialsList));
OleDbConnection connection = BadgeDatabaseDB.GetConnection();
string checkStatement
= "SELECT SerialNumber, OrderNumber "
+ "FROM SerialNumbersMFG "
+ "WHERE SerialNumber IN (@List)";
OleDbCommand command = new OleDbCommand(checkStatement, connection);
command.Parameters.AddWithValue("@List", joinedSerialsList);
string duplicateSerials = "";
try
{
connection.Open();
OleDbDataReader dataReader = command.ExecuteReader();
if (dataReader.Read())
{
duplicateSerials += dataReader["OrderNumber"].ToString() + "\n";
}
}
catch (OleDbException ex)
{
throw ex;
}
finally
{
connection.Close();
}
return duplicateSerials;
【问题讨论】:
-
那行不通。参数不能作为字符串替换。
-
如果你真的想要这种行为,你可以使用 dapper:dapper-tutorial.net/knowledge-base/31997381/…
-
您最终会得到一个引用列表,其中 SerialNumber IN ('123, abc, foo')。有几个解决方法。见stackoverflow.com/questions/2377506/… 或stackoverflow.com/questions/83471/…