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)”
然后发送相同数量的参数。好的,我试试。非常感谢。这是一种节省时间的技术。