2009-03-18 13 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> 

Ich habe einen SQLDataSource mit dem oben ausgewählten Befehl und dem folgenden Code, um den Wert HiddenASP.net: SQLDataSource und Session-Variablen

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 

ich spöttisch die Session mit (‚P2‘ einstellen , '7T'), die in den obigen sql-Befehl übergeben wird. wenn ich die Abfrage ausführen:

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

es einige Daten zurück, aber in meinem SQLDataSource Auswahlbefehl. Es gibt nichts zurück. Meine Vermutung ist wegen der wo Initialen in (@DualInitials) die(), die bereits im hiddenfield ist, aber wenn ich das() entferne und nur @DualInitials habe. Ich bekomme "Falsche Syntax in der Nähe von '@DualInitials'."

Kennt jemand eine Problemumgehung oder wo bekomme ich es falsch?

Antwort

1

Überprüfen Sie Antworten auf die ADO.NET TableAdapter parameters Frage.

Sie haben eine Abfrage mit einem String-Parameter, keinen Array-Parameter. Also, wenn Sie „(‚P2‘,‚7T‘)“ passieren denken Sie, dass die letzte Abfrage

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

In Wirklichkeit ist es ist

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

Wenn es nur geht zwei Initialen sein dann schreibe einfach mit der OR-Anweisung um. Ansonsten kenne ich keine gute Lösung außerhalb der im anderen Thread genannten.

+0

ein besonderen Grund, warum ich bekam -1 hier? Die IN-Anweisung behandelt den Parameter als String und nicht als Sequenz. Ich habe Jacks Problem gelöst. wtf? – Ruslan

0

Sie können eine IN-Anweisung in SQL nicht so parameterisieren. Sie müssen stattdessen String-Verkettung der SQL (schlecht) oder eine andere Technik wie die Analyse einer begrenzten Zeichenfolge verwenden.

0

Ohne die Probe läuft, kann ich nicht sicher sein, aber was ist

WHERE initials IN (<%=Eval(@DualInitials)%>) 
Verwandte Themen