2017-09-26 63 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