我有一个带有 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 并将这些整数连接成一个字符串。就像 this线。但这意味着需要对数据库进行大量额外调用才能获取这些 id。我真的更喜欢使用字符串值!
谁知道这个谜题怎么解?
最佳答案
TableAdapter 将继续转义引号。您可以创建一个用户定义的函数,它采用逗号分隔的参数并将其作为行返回。这样您就可以按如下方式访问该功能。我之前用 T-SQL 做过这个。它应该可以在 MySQL 中实现。
SELECT somefield
FROM sometable
WHERE somefield IN UDFDelimitedToRows(?)
关于c# - 如何在 C# 数据绑定(bind)中传递值列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21286270/