Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过1个SqlParameter发送几个逗号分隔的字符串,以便在WHERE in子句中使用?_C#_Tsql_Ado.net - Fatal编程技术网

C# 如何通过1个SqlParameter发送几个逗号分隔的字符串,以便在WHERE in子句中使用?

C# 如何通过1个SqlParameter发送几个逗号分隔的字符串,以便在WHERE in子句中使用?,c#,tsql,ado.net,C#,Tsql,Ado.net,我有一个查询,看起来像: string sqlText = @"SELECT col1, col3, col3 FROM table WHERE col1 IN (@listOFValues)"; string listOfValues = GetListOfValues(userName); paramList.Add(new SqlParameter("@listOFValues", l

我有一个查询,看起来像:

string sqlText = @"SELECT col1, col3, col3              
                   FROM table
                   WHERE col1 IN (@listOFValues)";

string listOfValues = GetListOfValues(userName);
paramList.Add(new SqlParameter("@listOFValues", listOFValues));
//..

private string GetListOfValues(string userName)
{
   var dt = ExecuteSqlQueryReturnsDataTable(userName); //this returns a datatable.

   string listOfValues = new StringBuilder();

   if(dt.Rows.Count == 1)
        {
            listOfValues.Append("'" + dt.Rows[0]["myColumnName"] + "'");
        }
        if (dt.Rows.Count > 1)
        {
            for (int i = 0; i < dt.Rows.Count - 1; i++)
            {
                listOfValues.Append("'" + dt.Rows[i]["myColumnName"] + "', ");
            }

            listOfValues.Append("'" + dt.Rows[dt.Rows.Count - 1]["myColumnName"] + "'");
        }
        return listOfValues.ToString();
}
string sqlText=@“选择col1、col3、col3
从桌子上
其中col1 IN(@listOFValues)”;
string listOfValues=GetListOfValues(用户名);
Add(新的SqlParameter(“@listOFValues”,listOFValues));
//..
私有字符串GetListOfValues(字符串用户名)
{
var dt=executeSqlQueryReturnsDataable(用户名);//这将返回一个数据表。
string listOfValues=新的StringBuilder();
如果(dt.Rows.Count==1)
{
追加(“”+dt.Rows[0][“myColumnName”]+“”);
}
如果(dt.Rows.Count>1)
{
对于(int i=0;i
总之,我想要的是能够生成类似于
'val1',val2',val3'
的东西,插入WHERE子句,比如
WHERE col1 in('val1','val2','val3')


感谢您的帮助首先,只使用逗号有点危险,因为您的数据可能包含一个逗号,这会导致唯一的东西损坏

根据该说明,您可以执行以下操作:

string sqlText = @"
    SELECT col1, col3, col3              
    FROM table
    WHERE col1 IN ({0})";

string[] arrOfValues = GetListOfValues(userName).Split(',');
string[] paramArray = arrOfValues.Select((x, i) => "@value" + i).ToArray();
cmd.CommandText = string.Format(sqlText, string.Join(",", paramArray));

for (int i = 0; i < arrOfValues.Length; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@value" + i, arrOfValues[i]));
}
string sqlText=@”
选择col1、col3、col3
从桌子上
其中col1在({0})”中;
字符串[]arrOfValues=GetListOfValues(用户名).Split(',');
字符串[]paramArray=arrOfValues.Select((x,i)=>“@value”+i.ToArray();
cmd.CommandText=string.Format(sqlText,string.Join(“,”,paramArray));
for(int i=0;i
首先,只使用逗号有点危险,因为您的数据可能包含一个逗号,导致唯一的东西损坏

根据该说明,您可以执行以下操作:

string sqlText = @"
    SELECT col1, col3, col3              
    FROM table
    WHERE col1 IN ({0})";

string[] arrOfValues = GetListOfValues(userName).Split(',');
string[] paramArray = arrOfValues.Select((x, i) => "@value" + i).ToArray();
cmd.CommandText = string.Format(sqlText, string.Join(",", paramArray));

for (int i = 0; i < arrOfValues.Length; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@value" + i, arrOfValues[i]));
}
string sqlText=@”
选择col1、col3、col3
从桌子上
其中col1在({0})”中;
字符串[]arrOfValues=GetListOfValues(用户名).Split(',');
字符串[]paramArray=arrOfValues.Select((x,i)=>“@value”+i.ToArray();
cmd.CommandText=string.Format(sqlText,string.Join(“,”,paramArray));
for(int i=0;i
到目前为止,您在执行命令时在
listOFValues中得到了什么
到目前为止,您在执行命令时在
listOFValues中得到了什么
出了什么问题,所以您的意思是查询将类似于
WHERE col1 in(@value1,@value2,@value3)“
然后发送相同数量的参数。好的,我试试。非常感谢你。这是一种节省时间的技术。您的意思是,查询看起来像
中的col1(@value1,@value2,@value3)”
然后发送相同数量的参数。好的,我试试。非常感谢。这是一种节省时间的技术。