BindParameter mit %

20/08/2009 - 12:37 von Björn Dehmel | Report spam
Hallo zusammen,

ich habe eine SQL Abfrage, in der ich ein LIKE benutzen muss. An die
übergebene Variable fürge ich ein % an:

strcat_s (szLagerplatz, sizeof (szLagerplatz), "%");

Der Lagerplatz wird mittels SQLBindParamter an die Anweisung gebunden:

SQLBindParameter (hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0,
(SQLPOINTER) szLagerplatz, 0, NULL);

Wenn die Anweisung ausgeführt wird, bekomme ich aber grundsàtzlich keine
Ergebnisse zurück. Hànge ich das % nicht an, sondern benutze zB Unterstriche
oder die komplette Nummer ist das kein Problem. Auch im Management Studio
kann ich das % benutzen oder wenn ich das Lager mit dem Statement prepare
statt einem ?(lager LIKE '17%'. Warum geht das nicht mit Parameterbindung,
bzw. wie muss der Syntax dafür lauten?

Danke im Voraus,
Björn
 

Lesen sie die antworten

#1 Elmar Boye
20/08/2009 - 14:15 | Warnen spam
Hallo Björn,

Björn Dehmel schrieb:
ich habe eine SQL Abfrage, in der ich ein LIKE benutzen muss. An die
übergebene Variable fürge ich ein % an:

strcat_s (szLagerplatz, sizeof (szLagerplatz), "%");

Der Lagerplatz wird mittels SQLBindParamter an die Anweisung gebunden:

SQLBindParameter (hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0,
(SQLPOINTER) szLagerplatz, 0, NULL);

Wenn die Anweisung ausgeführt wird, bekomme ich aber grundsàtzlich keine
Ergebnisse zurück.



Hàufiges Problem ist die Verwendung von Char anstatt Varchar auf
Datenbank Seite. Denn dabei kommt schnell ein Vergleich heraus wie
LIKE 'ab %'
wo die Leerzeichen am Ende den gewünschten Vergleich verhindern.
<URL:http://msdn.microsoft.com/de-de/lib...9.aspx>

Du benutzt oben SQL_CHAR, was auf SQL Server Seite für mit Leerzeichen
aufgefüllt Zeichenkette CHAR steht. In den meisten Fàllen ist SQL_VARCHAR
angebrachter.
http://msdn.microsoft.com/en-us/lib...85%29.aspx
"SQL Data Types"

Zudem sollte die fixe Lànge 10 mit dem sizeof (szLagerplatz)
übereinstimmen bzw. an beiden Stellen sizeof eingesetzt werden.

Über den SQL Server Profiler kannst Du sehen, was an den
SQL Server gesendet wird.

Gruß Elmar

Ähnliche fragen