【发布时间】:2014-04-06 06:06:50
【问题描述】:
程序是用 C# 编写的,我正在尝试将 List<string> 作为参数传递。
List<string> names = new List<string>{"john", "brian", "robert"};
在普通 SQL 中,查询将如下所示:
DELETE FROM Students
WHERE name = 'john' or name = 'brian' or name = 'robert'
在 C# 代码中运行 SQL 命令时,我知道正确的做法是使用参数,而不是将所有内容连接成一个巨大的字符串。
command.CommmandText = "DELETE FROM Students WHERE name = @name";
command.Parameters.Add(new MySqlParameter("@name", String.Format("'{0}'", String.Join("' or name = '", names)));
command.NonQuery();
上述方法无效。它没有抛出任何错误/异常,只是没有按照我想要的方式工作。
我应该怎么做?
我想过循环遍历List<string> 并只对每个名称执行。
foreach(string name in names)
{
command.CommmandText = "DELETE FROM Students WHERE name = @name";
command.Parameters.Add(new MySqlParameter("@name", name));
command.NonQuery();
command.Parameters.Clear();
}
但这需要很长时间,因为实际的List<string> 非常大。我想尽量少执行。
谢谢!
【问题讨论】:
-
command.CommmandText = "从学生中删除姓名(@name)";
-
您不能在参数值中包含 SQL 命令。在这种情况下,您实际上是在将 name 与“john or name = brian or name = robert”进行比较
-
@RobertRozas 您不能将值列表放入一个参数中。
-
我知道,这只是一个注释,但正确的解决方案是使用 IN...并参数化每个值...或内爆数组并粘合以匹配 IN 格式
-
实际上您可以很容易地编写代码来将
name = @n1 or name= @n2 or name = @n3添加到查询中并创建所有参数。使用In可以使代码更简洁,但重点是这里需要多个参数。
标签: c# mysql parameters