繁体   English   中英

如何在C#数据绑定中将值列表作为参数传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM