2

過去 2 時間、パラメーターをバインドできなかった理由を突き止めようとしていました (「using」ブロックを使用していないことはわかっています。また、System.Data.OracleClient が非推奨であることもわかっています)。次のコード:

  Dim nCount As Integer


  sSQL = " SELECT COUNT(*) FROM USERS WHERE USER_ID = :UID "

    Dim conn As OracleConnection = New OracleConnection(ConfigurationSettings.AppSettings("connString"))
    conn.Open()
    Dim cmd As OracleCommand = New OracleCommand(sSQL, conn)

    cmd.CommandType = CommandType.Text

    With cmd
        .Parameters.Add(New OracleParameter(":UID", txtUserID.Text))
    End With

    Try
        nCount = cmd.ExecuteScalar()
    Catch ex As Exception

    End Try

私はオンラインで見つけることができるすべてのバリエーションを試しました: Parameters.Add、Add、または AddWithValue にコロンを付けても付けなくても、括弧で追加するか、新しい OracleParameter オブジェクトを作成してから追加します...何も機能していないようです。

しかし、クエリで USER_ID をハードコードするだけで、parameter.Add を削除すると、値が返されます。

4

3 に答える 3

3

あはは!

UIDは、実際には Oracle の予約語です。UID変数を予約語ではないものに変更してください。

于 2013-07-02T20:42:09.947 に答える
0

少なくとも Oracle の ODP を調べてください。Microsoftが最終的にOracleClientにプラスを追加したので、それが必要になります。ODP への切り替えは非常に簡単です。

あなたの状況では、パラメーター名を省略します。とにかく、あなたは位置によって拘束されています。

Microsoft の実装では、SQL 構文も少し異なります。使う ?各プレースホルダーとして機能します。詳細については、 http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparameter.aspxを参照してください。

于 2013-07-03T11:11:52.657 に答える