2009-03-18 4 views
2
<asp:HiddenField ID="hfDualInitials" runat="server" Visible="false" OnInit="hfDualInitials_OnInit" /> 
    <asp:SqlDataSource ID="sdsStoreNo" runat="server" ConnectionString="<%$ ConnectionStrings:ConnStr %>" 
     SelectCommand="select * from AccountCancellation_Process 
         where store_num in (select distinct storeno from franchisedata where initials in (@DualInitials)) 
         order by CustomerName ASC" > 
     <SelectParameters> 
      <asp:ControlParameter ControlID="hfDualInitials" DbType="String" Name="DualInitials" /> 
     </SelectParameters>      
    </asp:SqlDataSource> 

У меня есть SqlDataSource с выше выбором команды и кодом ниже, чтобы установить значение скрытогоASP.net: SqlDataSource и Session переменной

Protected Sub hfDualInitials_OnInit(ByVal sender As Object, ByVal e As EventArgs)   
    Dim _DualInitials As String = "('P2','7T')" 
    Session.Add("DualInitials", _DualInitials) 
    Me.hfDualInitials.Value = Session("DualInitials") 
End Sub 

Я насмешливо сессию («P2» , '7T'), который будет передан в вышеупомянутую команду sql. , когда я выполнить запрос:

select * from AccountCancellation_Process where store_num in (select distinct storeno from franchisedata where initials in ('P2','7T')) 

это вернуть некоторые данные, но в моем SqlDataSource выберите команду. Он ничего не возвращает. мое предположение связано с тем, где инициалы в (@DualInitials)(), которые уже находятся в скрытом поле, но если я удалю() и просто @DualInitials. Я получу «Неправильный синтаксис рядом с« @DualInitials ».

Кто-нибудь знает обходное решение или где я ошибаюсь?

ответ

1

Проверьте ответы на вопрос ADO.NET TableAdapter parameters.

У вас есть запрос с параметром string, а не с параметром массива. Итак, когда вы проходите «(„P2“,„7T“)» Вы думаете, что окончательный запрос

WHERE initials IN ('P2', '7T') 

В действительности это

WHERE initials IN ('(''P2'', ''7T'')') 

Если только будет два инициалами затем просто перепишите с помощью инструкции OR. В противном случае я не знаю хорошего решения за пределами тех, что упоминаются в другом потоке.

+0

какой-либо конкретной причины, почему я получил -1 здесь? Оператор IN обрабатывает параметр как строку, а не последовательность. Я дал решение проблемы Джека. WTF? – Ruslan

0

Вы не можете параметризовать инструкцию IN в SQL так. Вам придется использовать конкатенацию строк SQL вместо (плохой) или какой-либо другой метод, например, разбор строки.

0

без запуска образца, я не могу быть уверен, но что

WHERE initials IN (<%=Eval(@DualInitials)%>) 
Смежные вопросы