首页 > 数据库 >C# 向SqlCommand添加参数列表

C# 向SqlCommand添加参数列表

时间:2023-03-23 11:00:47浏览次数:53  
标签:name C# Age cmd 列表 var SqlCommand CommandText

在我们写SQL时,经常会遇到INNOT IN这样的查询条件,这时后面的条件需要一个参数列表。
我们期待可以根据数据列表[1,3,5],动态生成多个参数,即@Parameter1=1,@Parameter2=3,@Parameter3=5。
我们可以写一个扩展方法实现它:

public static class SqlCommandExtensions
{
    public static void AddArrayParameters<T>(this SqlCommand cmd, string name, IEnumerable<T> values)
    {
        name = name.StartsWith("@") ? name : "@" + name;
        var names = string.Join(", ", values.Select((value, i) =>
        {
            var paramName = name + i;
            cmd.Parameters.AddWithValue(paramName, value);
            return paramName;
        }));
        cmd.CommandText = cmd.CommandText.Replace(name, names);
    }
}

如何使用它:

var ageList = new List<int> { 1, 3, 5, 7, 9, 11 };
var cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM MyTable WHERE Age IN (@Age)";
cmd.AddArrayParameters("Age", ageList);

//查看结果
foreach (SqlParameter parameter in cmd.Parameters)
{
    Console.WriteLine($"{parameter.ParameterName},{parameter.Value}");
}
Console.WriteLine(cmd.CommandText);

执行``后,得到SQL:

SELECT * FROM MyTable WHERE Age IN (@Age0, @Age1, @Age2, @Age3, @Age4, @Age5)

并且Parameters添加了@Age0, @Age1, @Age2, @Age3, @Age4, @Age5共6个参数。

示例代码

SqlCommandExtensionsAddParameterArrayToSqlCommandDemo

参考资料

Pass Array Parameter in SqlCommand

学习技术最好的文档就是官方文档,没有之一。
还有学习资料Microsoft Learn、【CSharp Learn】、My Note
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。



标签:name,C#,Age,cmd,列表,var,SqlCommand,CommandText
From: https://blog.51cto.com/u_15180952/6144528

相关文章