Frage

Ich verbinde erfolgreich zu einer Oracle 10g DB mit dem Microsoft ODBC-Treiber für Oracle.

Regelmäßige Abfragen ohne Parameter funktionieren, aber parametrisierte Abfragen handeln, als ob die Parameter nicht in übergeben werden, zu werden.

ex.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

Hier ist, was meine Verbindungszeichenfolge wie folgt aussieht:

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

Und ich bin Hinzufügen von Parametern zu meinem ODBC-Befehl wie folgt aus:

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

Vergib die partialy kopiert, etwas pseuedo Code.

War es hilfreich?

Lösung

Bit von necromancing hier, aber da ich gerade mit einem ähnlichen Problem zu kämpfen, hier ist, wie es mit den ODBC-Treiber für Centura SQLBase gearbeitet:

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

Dies sucht in „Tabelle“ für Datensätze mit dem Wert 12345 in „searchInt“ und heutiges Datum in „serachDat“.
Dinge zu beachten:

  • Parameter werden als ? in der markiert SQL-Befehl
  • Parameter brauchen keinen Namen, aber Position (und die korrekte Art) ist wichtig

Andere Tipps

ODBC-Parameter (durch das Symbol ? markiert) sind je nach Position gebunden ist, so müssen Sie sicherstellen, dass Sie die OdbcParameters in der richtigen Reihenfolge hinzufügen. Ihr Name ist dann unwichtig, aber ich würde paramName vorschlagen, ohne die @, die ein SQL Server (oder, besser gesagt, Microsoft) bestimmte Namen Format.

Sie können auch versuchen, das Oracle-Parameter-Format zu verwenden, das von der Microsoft ODBC-Treiber für Oracle anerkannt werden sollte und Sie erlauben würde, namentlich Bindung statt (nicht zu 100% sicher über diese, obwohl):

  • Ersetzen ? durch :paramName in Ihrer Anfrage.
  • Benennen Sie Ihre Parameter paramName.

Versuchen Sie es mit ": paramName" statt "paramName".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top