質問

Microsoft ODBC for Oracleドライバを使用してOracle 10g DBに正常に接続しています。

パラメータなしの通常のクエリは正常に機能しますが、パラメータ化されたクエリは、パラメータが渡されていないかのように機能します。

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

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

--odbc string parameter 'test'

接続文字列は次のようになります。

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

そして、次のようにODBCコマンドにパラメーターを追加しています:

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

...

cmd.Parameters.AddRange(arrOdbcParam)

部分的にコピーされた、いくぶん擬似コードを許します。

役に立ちましたか?

解決

ここで壊死のビットが、私はちょうど同様の問題に苦労したので、Centura SQLBaseのODBCドライバーでそれがどのように機能したかを以下に示します。

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();

これは" table"で検索します。 " searchInt"の値が12345のレコードの場合「今日の日付」は「serachDat」です。
注意事項:

  • パラメータは、としてマークされます SQLコマンド
  • パラメーターには名前は必要ありませんが、 しかし、位置(および正しいタイプ)は 重要

他のヒント

ODBCパラメーター(記号でマーク)は位置によってバインドされているため、 OdbcParameter を正しい順序で追加する必要があります。その名前は重要ではありませんが、SQL Server(またはMicrosoft)固有の名前形式である @ なしの paramName をお勧めします。

Oracleパラメーター形式を使用することもできます。これは、Microsoft ODBC for Oracleドライバーで認識される必要があり、代わりに名前でバインドできます(ただし、これについては100%確信できません):

  • クエリの:paramName に置き換えます。
  • パラメーターに paramName という名前を付けます。

":paramName"を使用してみてください" paramName"の代わりに。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top