c# - 如何将 List<string> 转换为 Sql In 语句的 SqlParameter?

标签 c# sql ado.net sqlcommand

<分区>

我似乎对如何执行 In 感到困惑带有 SqlParameter 的语句.到目前为止,我有以下代码:

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingList));

reader = cmd.ExecuteReader();

settingsListList<string> .当cmd.ExecuteReader()被调用,我得到一个 ArgumentException由于无法映射 List<string>到“已知的提供商类型”。

我如何(安全地)执行 InSqlCommand 查询是吗?

最佳答案

你可以尝试这样的事情:

string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));

for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}

关于c# - 如何将 List<string> 转换为 Sql In 语句的 SqlParameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502821/

相关文章:

javascript - FullCalendar 中的工具提示

c# - .NET core 3.1 - Angular 9 - Angular CLI 进程没有在 0 秒的超时时间内开始监听请求

sql - 使用具有重复行的表值参数批量插入

ado.net - ado.net 现在已经过时了吗?

c# - bulkCopy.WriteToServer 不复制

c# - 如何序列化 IDictionary

sql - 从 MySQL 表中检索和输入所有 "type",但仅检索每个 "type"的最新条目

C# Linq to SQL 连接字符串(新手)

.net - 为特定客户端分析 SQL Server 的影响最小的方法是什么?

c# - OracleBulkCopyOptions.Default 和 OracleBulkCopyOptions.UseInternalTransaction 之间的区别。