在MySQL.NET提供程序中使用命名参数

在MySQL.NET提供程序中使用命名参数,.net,mysql,.net,Mysql,在MySQL.NET提供程序中,您可以使用以下语法中的命名参数: ?parametername 现在,我正在尝试为将在“in”列表中使用的参数创建命名参数,例如: select * from mytable where id in (?ids) 如何使用命名参数,如果使用varchar,它将在列表前后添加引号,即: 如果我使用varchar传递参数值: cmd.Parameters.Add("?ids", MySqlDbType.Varchar).Value = ids; // ids is

在MySQL.NET提供程序中,您可以使用以下语法中的命名参数:

?parametername
现在,我正在尝试为将在“in”列表中使用的参数创建命名参数,例如:

select * from mytable where id in (?ids)
如何使用命名参数,如果使用varchar,它将在列表前后添加引号,即:

如果我使用varchar传递参数值:

cmd.Parameters.Add("?ids", MySqlDbType.Varchar).Value = ids; // ids is a string which contains the ids separated by commas, e.g. 1, 2, 3 .. etc
查询将按如下方式执行:

select * from mytable where id in ('1, 2 ,3')
SELECT * FROM mytable WHERE id IN (?, ?, ?)
当然,这会引发一个错误,如何在不获取引号的情况下传递命名参数,这是应该执行的方式:

select * from mytable where id in (1, 2 , 3)
有什么解决办法吗?我目前正在使用String.Format(),但希望使用一个命名参数,这是可能的吗


另外,我只使用纯文本语句,没有存储过程,所以这些都不会传递给存储过程(以防您认为这是不可能的,因为存储过程不接受数组)

这里已经问了很多次了,我已经停止计数了

不管技术如何,答案总是一样的。您只需向查询中添加您计划在“参数”中使用的as-may参数

如果要查询(1、2、3)中的
WHERE id
,则准备好的语句必须如下所示:

select * from mytable where id in ('1, 2 ,3')
SELECT * FROM mytable WHERE id IN (?, ?, ?)
使用您认为合适的任何字符串构建工具来生成这样的SQL字符串。然后,向其添加三个参数值

将SQL代码与数据分离是准备好的语句的全部要点。逗号是SQL代码,您永远不会用一个参数将它们放入语句中,它们必须在前面

好的,有一个选择。创建一个单独的/临时表,将您的ID存储在其中并查询如下内容:

SELECT
  * 
FROM 
  mytable m
  INNER JOIN searchtable s ON m.id = s.id

这个问题在这里被问了很多次,我停下来数数

不管技术如何,答案总是一样的。您只需向查询中添加您计划在“参数”中使用的as-may参数

如果要查询(1、2、3)中的
WHERE id
,则准备好的语句必须如下所示:

select * from mytable where id in ('1, 2 ,3')
SELECT * FROM mytable WHERE id IN (?, ?, ?)
使用您认为合适的任何字符串构建工具来生成这样的SQL字符串。然后,向其添加三个参数值

将SQL代码与数据分离是准备好的语句的全部要点。逗号是SQL代码,您永远不会用一个参数将它们放入语句中,它们必须在前面

好的,有一个选择。创建一个单独的/临时表,将您的ID存储在其中并查询如下内容:

SELECT
  * 
FROM 
  mytable m
  INNER JOIN searchtable s ON m.id = s.id

问题是,您不能只传递一个参数。您希望传递一组参数。因为据我所知,目前还不支持这一点(数组或集合没有DbType)。因此,不能将多个值作为一个参数添加

由于(我假设)“ids”中的数字元素可能会有所不同,因此需要更改命令字符串以获得适当数量的参数。可以使用一些循环来生成命令字符串并用各自的值填充参数。这基本上意味着您正在为每个查询生成一个新命令


另一种解决方案是使用一个存储过程,该过程接受逗号分隔的列表,并使用它来构建查询。

问题在于,您没有只传递一个参数。您希望传递一组参数。因为据我所知,目前还不支持这一点(数组或集合没有DbType)。因此,不能将多个值作为一个参数添加

由于(我假设)“ids”中的数字元素可能会有所不同,因此需要更改命令字符串以获得适当数量的参数。可以使用一些循环来生成命令字符串并用各自的值填充参数。这基本上意味着您正在为每个查询生成一个新命令

另一种解决方案是使用一个存储过程,该存储过程接受逗号分隔的列表,并使用它来构建查询