1

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

我有一个从带有 WHERE IN 子句的 DataSource 填充的网格视图,如下所示:

<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 修改参数列表、使用 ControlParemers 等。

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

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

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

4

3 回答 3

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;

希望这有帮助。

于 2013-07-03T07:22:11.083 回答
0

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

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

检查此链接

于 2013-03-19T19:34:03.703 回答
0

我还建议您通过用户 VisDev String.Format("SELECT mycolumns FROM mytables WHERE GROUP_NAME IN ({0})", yourparamlist)

你的paramlist在哪里

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

希望它能解决你的问题。

于 2013-11-27T03:12:19.690 回答