2

在过去的 2 个小时里,我试图弄清楚为什么无法绑定参数(好吧,我知道我没有使用“使用”块。而且我知道 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,删除参数。添加,它会返回一个值。

4

3 回答 3

3

哈!

UID实际上是Oracle中的保留字。将您的变量更改UID为不是保留字的内容。

于 2013-07-02T20:42:09.947 回答
1

对我来说,在尝试不同的组合时,您似乎错过了一些东西。

此变体必须有效:

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

cmd.Parameters.Add("UID", OracleType.VarChar).Value = txtUserID.Text

nCount = cmd.ExecuteScalar()

请试一试...

于 2013-07-03T07:26:02.467 回答
0

帮自己一个忙,至少看看 Oracle 的 ODP。你将需要它,微软终于在它的 OracleClient 上加了一个加号。切换到 ODP 非常容易。

在您的情况下,我会省略参数名称。无论如何,您都是按位置绑定的。

SQL 语法在 Microsoft 实现中也略有不同。用一个 ?充当每个占位符。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparameter.aspx

于 2013-07-03T11:11:52.657 回答