2017-09-26 60 views
0

我有一個是給參數化查詢指OracleDB的

參數化查詢「ORA-01008:未綁定的所有變量」的錯誤。

Dim Conn 
Dim Cmd 
Dim RS 

Dim strID 
Dim param 

strID = Request.QueryString("id") 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open strConnect  


Set Cmd = Server.CreateObject("ADODB.Command") 


Cmd.CommandText = "SELECT column_name FROM table WHERE (id = :id)" 
Set param = Cmd.CreateParameter("id", adVarChar , adParamInput ,50 , strID) 
Cmd.Parameters.Append param 
Cmd.CommandType = adCmdText 

Set Cmd.ActiveConnection = Conn 


Set RS = Cmd.Execute() 

我試圖在語法修改在幾個方面,那麼它給

ORA-00936:缺少表達

請幫我走出這個。對於您的信息,連接沒有問題,因爲我能夠與普通查詢連接。

+0

不可否認,我不使用Oracle,但是在使用'adCmdText'時,它與其他ADODB提供者的語法不同嗎?你是否在SQL字符串中嘗試了'?'而不是':id'? – Lankymart

+0

感謝您的回覆,我不確定語法。我已經嘗試'?'建議但仍面臨「ORA-01008:並非所有變量綁定」錯誤 –

+0

只是爲了確認,你試過'Cmd.CommandText =「SELECT column_name從表WHERE(id =?)」'沒有成功? – Lankymart

回答

0

幾件事情要檢查:

1)儘量編碼strID的值,所以不是:

strID = Request.QueryString("id") 

嘗試

strID = 100 

2)仔細檢查您的欄定義並確保你從varchar(50)字段中選擇

3)確保你有adovbs.inc引用您的頁面上的ADO常量定義

0

謝謝@Lankymart,幸運的是我得到了如下解決方案。它對我來說工作得很好,並且對發佈答案的延遲感到抱歉,我的問題在2小時前解決。

Dim Conn 
Dim Cmd 
Dim RS 

Dim strID 
Dim param 

strID = Request.QueryString("id") 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open strConnect  
Set Cmd = Server.CreateObject("ADODB.Command") 

With Cmd 
.CommandText = "SELECT column_name FROM table WHERE id = ?" 
.Parameters.Append .CreateParameter(,200, 1 ,50 ,strID) 
Set .ActiveConnection = Conn 
End With 

Set RS = Cmd.Execute() 
+0

由於Josh [在第3點提到](https://stackoverflow.com/a/46428521/692942),它將缺少命名常量,如定義了「adCmdText」,「adVarChar」等。我沒有提到它,因爲它應該在到達Oracle之前導致錯誤,因爲'Cmd.CommandType = adCmdText'我也會期望它失敗。看看[這個答案](https://stackoverflow.com/a/35530750/692942)如何使用METADATA解決它,而不必刪除命名常量。 – Lankymart