VB.NET ORA-01745:无效的主机/绑定变量名称

时间:2013-07-02 20:18:19

标签: asp.net oracle

在过去的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进行硬编码,请删除parameter.Add,它会返回一个值。

3 个答案:

答案 0 :(得分:3)

HA!

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

答案 1 :(得分: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()

请试一试......

答案 2 :(得分:0)

帮自己一个忙,至少从Oracle看ODP。你需要它与微软最终在其OracleClient上取得优势。切换到ODP非常容易。

在你的情况下,我会省去参数名称。无论如何,你的位置都是有约束力的。

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