c# - 如何在 C# 数据绑定(bind)中传递值列表作为参数

标签 c# mysql asp.net dataset mysql-connector

我有一个带有 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/

相关文章:

javascript - 如何更改javascript函数中的标签文本?

c# - 为什么我的 ILoadEventListener 没有被调用?

asp.net - .net 模板我在哪个页面?

C#清零前清空列表

python - Mac OSX 10.12.6 上的 Flask mysql 连接错误

mysql - MariaDB/PostgreSQL - 查询优化

java - Digital Ocean 中托管的应用程序的 MySQL JDBC 驱动程序连接字符串应该是什么?

.net - 如何抓取网站,客户端或服务器端?

c# - ColdFusion - cfusion_encrypt() 和 cfusion_decrypt() - C# 替代方案

c# - Sqlserver.exe 已停止工作