2013-07-02 38 views
2

在过去的2个小时里,我试图找出为什么参数无法绑定(嗯,我知道我没有使用“使用”块。 System.Data.OracleClient的是不建议使用),请帮我看看有什么错用下面的代码:VB.NET ORA-01745:无效的主机/绑定变量名称

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结肠,添加或AddWithValue ,添加一个括号或创建一个新的OracleParameter对象,然后添加它...似乎没有任何工作。

但是,如果我只是在查询中硬编码USER_ID,请删除parameter.Add,它会返回一个值。

+0

您是否在创建OracleCommand对象后尝试使用'OracleCommand.BindByName = True'? – Scotch

+0

嗨苏格兰威士忌,VisioStudio说''BindByName'不是'System.Data.OracleClient.OracleCommand'的成员'“ – Cal

回答

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

请尝试...

3

A HA!

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

+0

我试过非保留字,像User_ID,仍然没有运气:( – Cal

+0

我想我点击了然后。我在手机上,所以我不能真正做任何挖掘或测试。希望有人来一个修补程序 – Scotch

+0

非常感谢您的努力:) – Cal

0

帮自己一个忙,至少考虑ODP从甲骨文。微软最终需要与OracleClient相结合。切换到ODP非常容易。

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

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

+0

感谢您的建议,但这不是我决定进行应用程序范围的更改。我所能做的就是保持它与以前一样,并且使切换越来越不可能。 – Cal

相关问题