2009-03-16 6 views
6

Ich habe eine Abfrage, die ich durch ein ASP.NET TableAdapter ausführen möchte, das eine IN-Klausel enthält, die seine Werte über einen Parameter erhalten soll.ADO.NET TableAdapter-Parameter

Meine Frage ist, wie gebe ich diesen Parameter an? Ich dachte an die bedingte Anweisung wie folgt zu schreiben:

AND b.group_category_id in (@ParamList) 

wo der @ParamList ein String der Parameter, zum Beispiel "4,12,45,23", aber da die angegebene ID eine Ganzzahl ist, beschwert sie sich, dass sie String nicht in Ganzzahl konvertieren kann. Dies ist sinnvoll, aber gibt es eine Möglichkeit, eine solche Liste in einer SQL-Anweisung in einem ASP.NET TableAdapter anzugeben?

+0

Ich fürchte, ich kann eine Antwort hier nicht wirklich akzeptieren, wie sich herausstellt, dass es nicht wirklich getan werden kann, ohne einen Workaround zu verwenden, den ich nicht machen wollte. Es tut uns leid! –

Antwort

0

Beantworten meiner eigenen Frage mit: es kann nicht getan werden.

0

könnten Sie passieren @ParamList durch als kommagetrennte Zeichenfolge, analysieren die Zeichenfolge und fügen Sie die Ergebnisse in eine #table, dann verwenden Sie die #table suchen:

AND b.group_category_id in (select group_category_id from #group_category_id_list) 

Neben dieser Optionen sind begrenzt, es sei denn, Sie möchten dynamische SQL (exec() -Anweisung), aber ich rate Ihnen, wenn möglich zu vermeiden.

+0

Ja, ich versuche, dynamisches SQL zu vermeiden. –

1

Eine Abhilfe, die ich gesehen habe:

WHERE charindex(',' + cast(b.group_category_id as varchar) + ',', @ParamList) > 0 

In diesem Fall wird der @ParamList wäre ein String in der Form "4,12,45,23"

Es ist nicht „hübsch ", aber bewahrt die Parameter und Vorteile einer kompilierten Abfrage. Da Sie nach Zahlen suchen, garantiert die Unterzeichenfolge eine eindeutige Übereinstimmung.