2013-03-19 4 views
1

Использование Studio 2010 C# с DB2 UDB 9.7.5SQL DataSource, используя ИНЕКЕ В

У меня есть GridView заселяется из DataSource с WHERE В статье следующим образом:

<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> 

жестко прописывать ИНЕКЕ работает отлично (т.е. когда GROUP_NAME IN («gROUP1», «gROUP2», «») group3

Но я пытаюсь создать список групп, используя на Выбор события моего источника данных в моем коде позади следующим образом:

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, изменить список parm, используя e.Command.Parameters.Add, используя ControlParemeters и т. Д.

Я также прочитал сообщение о том, как предложения WHERE IN не могут обрабатывать запятую, разделенные списки пареметров, но ключевое слово IN может запрашивать таблицу.

Мой gpList не построен из другого оператора SELECT, но я по-прежнему пробовал несколько примеров этого без везения. Будучи новичком, я, кажется, танцую вокруг решения.

Пожалуйста, дайте мне знать, если я пропустил сообщение, которое поможет ответить на этот вопрос. Любая помощь будет оценена по достоинству.

+0

Вы пытались запустить запрос Select внутри C#/SQL Server ..? если вы передаете значения как двойные кавычки или одиночные кавычки ...? можете ли вы передать его как параметр String {0}, как этот «ВЫБЕРИТЕ mycolumns FROM mytables WHERE GROUP_NAME IN {0}» в коде за переходом в param using stringFormat() возможно – MethodMan

+0

Изменение предложения where в WHERE GROUP_NAME IN {0} дает мне ошибку Invalid SQL Syntax. Что мне нужно изменить в ? – dev

+0

Выберите параметры, на которые они установлены в данный момент.? – MethodMan

ответ

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

+0

Форматирование команды select отлично работало - отображение LUWAccts.SelectCommand.ToString() дает мне SELECT mycolumns FROM mytables WHERE GROUP_NAME IN ('GROUP1', 'GROUP2') 'Но все равно никаких результатов. Я полагаю, что из этих примеров в игре нет - правильно? Или я должен также передать Command.Parameters здесь? – dev

+0

В этом же случае добавьте 'gvGrid01.DataBind();'. Всякий раз, когда вы меняете источник данных - (в вашем случае команда select), вы должны перепроверить представление сетки. – VisDev

+0

Помещение данных в событие Selecting дает мне бесконечный цикл – dev

0

Наконец я решил использовать подобно и соединив их с 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; 

Надеется, что это поможет.

0

Я также предлагаю вам сделать что-то вроде пользователем VisDev String.Format ("SELECT mycolumns FROM mytables WHERE GROUP_NAME IN ({0})", yourparamlist)

Где yourparamlist были бы

«value1 , value2, value3 " его просто подсказка, чтобы вы могли реализовать ее в соответствии с вашими требованиями.

Надеюсь, что это решит вашу проблему.

Смежные вопросы