如何翻译列表到 Sql In 语句的 SqlParameter 中?
我似乎对如何使用 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
。当调用 cmd.ExecuteReader() 时,由于无法将 List
映射到“已知的”,我收到 ArgumentException
提供商类型”。
如何(安全地)使用 SqlCommand
执行 In
查询?
I seem to be confused on how to perform an In
statement with a SqlParameter
. So far I have the following code:
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
is a List<string>
. When cmd.ExecuteReader()
is called, I get an ArgumentException
due to not being able to map a List<string>
to "a known provider type".
How do I (safely) perform an In
query with SqlCommand
s?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你可以尝试这样的事情:
You could try something like this:
您似乎试图传递一个多值参数,该 SQL 语法不会执行您所期望的操作。您可能想要传递表值参数。
阅读此内容:http://www.sommarskog.se/ arrays-in-sql.html#iter-list-of-strings
具体来说: http://www.sommarskog.se/arrays-in-sql-2008.html#ListSqlDataRecord
You appear to be trying to pass a multi valued parameter, that SQL syntax isn't going to do what you expect. You may want to pass a table value parameter.
Read this: http://www.sommarskog.se/arrays-in-sql.html#iter-list-of-strings
specifically: http://www.sommarskog.se/arrays-in-sql-2008.html#ListSqlDataRecord
如果您使用的是 Sql Server 2008 或更高版本,则可以使用表值参数 - 这允许您将值表作为参数传递。在 .net 中,您定义一个“结构化”类型 SqlParameter 并将值设置为实现 IEnumerable 的值。
请参阅此处的完整 MSDN 参考和示例: http://msdn.microsoft.com/ en-us/library/bb675163.aspx
If you're using Sql Server 2008 or later, you can make use of table valued parameters - this allows you to pass in a table of values as a parameter. From .net you define a "structured" type SqlParameter and set the value to something that implements IEnumerable.
See the full MSDN reference with examples here: http://msdn.microsoft.com/en-us/library/bb675163.aspx
我曾经使用自己的函数来创建这样的参数:
I ever use my own function to create Parameters like this:
使用 XML,对于这种情况来说速度很快。您可以将列表转换为 XML 并简单地传递一个字符串:
Use XML, it's plenty fast for this scenario. You would turn your list into XML and simply pass a string:
我通常将列表作为逗号分隔的字符串传递,然后使用表值函数将字符串“拆分”到一个表中,然后我可以使用该表来连接另一个查询。
当然,除非您使用 SQL Server 2008,否则我将使用表值参数。
I usually pass in the list as a comma separated string, and then use a table valued function to 'split' the string into a table that I can then use to join with in another query.
Unless of course you are using SQL Server 2008, then I would use the table valued parameters.