c# - 将 List<int> 作为查询参数传递给 SQL Server

标签 c# sql-server list parameter-passing

我必须使用 C# 将列表传递给 SQL Server 查询。我的代码在这里:

using (SqlDataReader _myReader_2 = _myCommand_3.ExecuteReader())
{
    _Node_Neighbor.Clear();
        while (_myReader_2.Read())
        {
            _Node_Neighbor.Add(Convert.ToInt32(_myReader_2["Target_Node"]));
        }

    _myReader_2.Close();

  //Here I have to pass this _Node_Neighbor i.e. of type List<int> to another  
  //SQL Server query as:

    try
        {
            SqlCommand _myCommand_4 = _con.CreateCommand();

            _myCommand_4.CommandText = @"SELECT COUNT(*) FROM GraphEdges
                                         WHERE Source_Node IN @Source_Node 
                                         AND Target_Node IN @Target_Node";

            _myCommand_4.Parameters.AddWithValue("@Source_Node", _Node_Neighbor);
            _myCommand_4.Parameters.AddWithValue("@Target_Node", _Node_Neighbor);

            _Mutual_Links = Convert.ToInt32(_myCommand_4.ExecuteScalar());
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }
}  

然而,要传递列表作为参数,我认为可能还有其他方法,这就是我收到此错误的原因: 对象类型 Systems.Collections.Generic.List 不存在映射

谢谢!

最佳答案

为了传递 IN 的数组/列表,您必须为列表中的每个值创建一个参数。

try
    {
        SqlCommand _myCommand_4 = _con.CreateCommand();


        List<string> sqlParams = new List<string>();
        int i = 0;
        foreach(var value in _Node_Neighbor){
            var name = "@p"  + i++;
            _myCommand_4.Parameters.Add(name,value);
            sqlParams.Add(name);
        }

        string paramNames = string.Join(",", sqlParams);

        _myCommand_4.CommandText = "SELECT COUNT(*) FROM GraphEdges"
                       " WHERE Source_Node IN (" + paramNames + ") " 
                         " AND Target_Node IN (" + paramNames + ")";


        _Mutual_Links = Convert.ToInt32(_myCommand_4.ExecuteScalar());
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
    }

关于c# - 将 List<int> 作为查询参数传递给 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619320/

相关文章:

html - 李 :hover grows in width inside floating wrapper

python - 简单的二十一点游戏 : deck list becomes NoneType

c# - 如何: Avoid Inserting Related Entities?

c# - 无法加载文件或程序集 'System.Web.WebPages.Razor,版本 = 3.0.0.0

c# - Unity 3d 中的嵌套列表 - 我该怎么做?

sql-server - 在 BIML SSIS 脚本中跳过列

c# - SSIS For Each循环中的脚本任务-写入文件

c# - PowerShell 变量和 C#

c# - 通过外部(自定义)服务的 ASP 核心登录

sql-server - 如何优化执行时间过长的存储过程?