[英]How to pass a list of values as parameter in c# databinding
我有一个带有MySql数据库的Asp.Net应用程序。 要访问此数据库,我使用数据集(.xsd),将查询放入TableAdapters中。 这些查询之一具有WHERE IN
子句,例如:
SELECT somefield
FROM sometable
WHERE somefield IN (?)
该somefield
是一个字符串值。 TableAdapter函数需要一个字符串参数来替换查询参数。 但是,我想传递一个List<string>
(或数组,或任何其他类型)来检查多个值。 到目前为止,我发现的唯一方法是将列表转换为逗号分隔的列表:
GetData(string.Join(",", myList.ToArray());
只要列表中只有一个值,它就可以正常工作。 使用两个值,查询将返回0行。 我在MySql中激活了常规日志,发现它与引号有关。 到达数据库的查询是:
SELECT somefield
FROM sometable
WHERE somefield IN ('foo,bar')
加入值时,我添加了额外的引号:
GetData(string.Join("','", myList.ToArray());
但是多余的引号只能转义,结果仍然是0行:
SELECT somefield
FROM sometable
WHERE somefield IN ('foo\',\'bar')
现在,我看到的唯一选择是将每个单个字符串转换为id并将这些整数连接为字符串。 就像在这个线程中一样。 但这意味着要对数据库进行很多额外的调用才能获取这些ID。 我真的更喜欢使用字符串值!
谁知道如何解决这个难题?
尝试这个:
GetData(String.Format("'{0}'", String.Join(",", myList.ToArray()));
如果单引号被转义,请将其加倍,例如:
GetData(String.Format("''{0}''", String.Join(",", myList.ToArray()));
TableAdapter将保留转义的引号。 您可以创建一个用户定义的函数,该函数采用逗号分隔的参数并将其作为行返回。 这样,您可以按以下方式访问该功能。 我以前用T-SQL完成过。 它应该在MySQL中可行。
SELECT somefield
FROM sometable
WHERE somefield IN UDFDelimitedToRows(?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.