【发布时间】:2010-12-21 18:50:53
【问题描述】:
我似乎对如何使用SqlParameter 执行In 语句感到困惑。到目前为止,我有以下代码:
cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingList));
reader = cmd.ExecuteReader();
settingsList 是 List<string>。当调用 cmd.ExecuteReader() 时,由于无法将 List<string> 映射到“已知的提供程序类型”,我得到一个 ArgumentException。
我如何(安全地)使用SqlCommands 执行In 查询?
【问题讨论】:
-
您希望将列表转换为哪种 SQL 类型?没有数组...
-
我需要列表是sql字符串的列表,例如
where setting in ('setting1', 'setting2') -
@KallDrexx,这毫无意义。 SQL 中没有这种数据类型。您可以做的最好的事情是修改您的“CommandText”以自己构建所需的 SQL(在 SQL 中嵌入参数值)。它不能封装在
SqlParameter中。 -
除非允许执行不安全的 sql。我很难相信没有允许安全 sql
in语句的构造 -
@KirkWoll,他没有尝试插入数组,查询是一个带有预期多值参数的选择。他正试图做这样的事情: set @pCode='''A1'',''A2'',''A3''' Exec ('Select * From Receiving Where Code In (' + @pCode + ') ')
标签: c# sql ado.net sqlcommand