2013-07-02 36 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

相關問題