SQL DataSource使用WHERE IN子句

时间:2013-03-19 18:20:10

标签: c# .net visual-studio-2010 sqldatasource where-in

将Studio 2010 C#与DB2 UDB 9.7.5一起使用

我从一个带有WHERE IN子句的DataSource填充了gridview,如下所示:

<asp:SqlDataSource ID="LUWAccts" runat="server" onSelecting="gvGrid01_Selecting"
ConnectionString="<%$ ConnectionStrings:LUWHAConnect %>" 
ProviderName="<%$ ConnectionStrings:LUWHAConnect.ProviderName %>" 

SelectCommand="SELECT mycolumns FROM mytables WHERE GROUP_NAME IN ? ">
<SelectParameters>
  <asp:Parameter Name="grpList" Type="String" /> 
</SelectParameters>

对WHERE子句进行硬编码可以正常工作 (即WHERE GROUP_NAME IN('GROUP1','GROUP2','GROUP3')

但我正在尝试使用我的代码中的数据源的onSelecting事件构建组列表,如下所示:

protected void gvGrid01_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
  string gpList = Get_SVCACCT_Auth_Groups(Session["ThisUser"].ToString());
              //This routine returns the string "('GROUP1','GROUP2','GROUP3')"
}

当我显示grpList字符串时,我确实有('GROUP1','GROUP2','GROUP3')。

但是我没有显示任何数据。我搜索并尝试了各种技术来改变SELECT语句,使用e.Command.Parameters.Add修改parm列表,使用ControlParemeters等。

我还读了一篇关于WHERE IN子句如何处理逗号分隔列表参数的帖子,但IN关键字可以查询表。

我的gpList不是从另一个SELECT语句构建的 - 但我仍然尝试了一些这样的例子而没有运气。作为一个新手 - 我似乎在解决方案中跳舞。

如果我错过了一篇有助于解答这个问题的帖子,请告诉我。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可以在gvGrid01_Selecting事件中尝试此操作

LUWAccts.SelectCommand = 
String.Format("SELECT mycolumns FROM mytables WHERE GROUP_NAME IN {0})",
Get_SVCACCT_Auth_Groups(Session["ThisUser"].ToString()));

Check this link

答案 1 :(得分:0)

最后我决定使用Like并将它们加入OR。所以我会对项目列表进行迭代并添加类似过滤器并将它们附加到这样的内容:

string[] allStr = recieveFilter.Split(',');
string filterRecieverItem = "";
foreach (string recieveItem in allStr)
{
   filterRecieverItem += "(sampleField like '%" + recieveItem.Trim() + "%') OR ";
}
filterRecieverItem = filterRecieverItem.Remove(filterRecieverItem.Length - 3, 3);
ds_Sample.FilterExpression = filterStr;

希望得到这个帮助。

答案 2 :(得分:0)

我还建议你做一些像用户VisDev这样的事情 String.Format(“SELECT mycolumns FROM mytables WHERE GROUP_NAME IN({0})”,yourparamlist)

你的参数列表

“value1,value2,value3” 它只是一个提示,所以你可以根据你的要求实现它。

希望它能解决你的问题。