odbccommand und Parameter, Grundsatzfrage

24/06/2009 - 09:49 von Christian Stüben | Report spam
Hallo allerseits,
ich habe eine Frage zu odbccommand und Parametern.

Wer oder was setzt die zu einem odbccommand gegebenen Parameter letztendlich
in der Query ein.
Mach das der odbccommand, oder werden die Parameter vom odbccommand nur an
die Datenbank weitergereicht, und die Datenbank setzt die Parameter in der
Query ein? Ich vermute die Parameter werden an die Datenbank weitergegeben.

Hintergrund...
wenn ich im odbccommand.commandtext für meinen Filemaker Server angebe ...
insert into mitarbeiter (abteilung_sn, vorname, nachname) values
(@abteilung_sn, @vorname, @nachname)

und die Parameter @abteilung_sn, @vorname, @nachname über ...Parameter.Add
("@abteilung_sn", ... und ...value=... angebe, erhalte ich nur einen sql
parse error.



Die gleiche Query, probeweise über sqlcommand an einen SQL Server abgesetzt,
làuft problemlos.



Setze ich hingegen hàndisch die Parameter ein, wie beispielsweise ...

insert into mitarbeiter (abteilung_sn, vorname, nachname) values (1,
'Peter', 'Tunichgut')



wird die Query vom Filemaker Server angenommen und korrekt ausgeführt. Aber
diesen weg möchte ich zur Entschàrfung möglicher sql injections vermeiden.



Visual Studio 2005, Filemaker Server 9a (!!!), w2k3.



Danke im Voraus!

mfg Chris
 

Lesen sie die antworten

#1 Elmar Boye
24/06/2009 - 10:28 | Warnen spam
Hallo Christian,

Christian Stüben schrieb:
Wer oder was setzt die zu einem odbccommand gegebenen Parameter letztendlich
in der Query ein.
Mach das der odbccommand, oder werden die Parameter vom odbccommand nur an
die Datenbank weitergereicht, und die Datenbank setzt die Parameter in der
Query ein? Ich vermute die Parameter werden an die Datenbank weitergegeben.



Aus Sicht von ODBC wird ein Parameter mit SQLSetDescField gesetzt:
<URL:http://msdn.microsoft.com/en-us/library/ms713560(VS.85).aspx>

Die Implementation liegt beim ODBC Treiber.
Üblicherweise übermittelt der Treiber die Anweisung und die Parameter
als eigenen Block. Mit unten hat das aber nur indirekt zu tun.

Hintergrund...
wenn ich im odbccommand.commandtext für meinen Filemaker Server angebe ...
insert into mitarbeiter (abteilung_sn, vorname, nachname) values
(@abteilung_sn, @vorname, @nachname)



Der ODBC (und auch der OleDb) Treiber versteht nur positionelle
Parameter mit "?". Das einige Treiber (wie der Jet OleDb) eine
Ersetzung vornehmen, ist ein Treiber-Feature, keines von ODBC.
Siehe http://msdn.microsoft.com/de-de/lib...y35y8.aspx

Gruß Elmar

Ähnliche fragen