Microsoft OLE DB Provider for SQL Server错误'80040e14'

时间:2011-10-03 01:53:04

标签: sql-server asp-classic ado

存储过程,并使用ADO进行连接,但我遇到了引号问题..

    x = "text'"

    If instr(x,"'") then x=replace(x,"'","''")

    'x = "text''" at this point

    Set Rs = Server.Createobject("adodb.recordset")
    Rs.Open "Select_SP @name='" & x & "'"

我以为我这样做是对的..但我猜不是,因为我收到了这个错误:

    Microsoft OLE DB Provider for SQL Server  error '80040e14' 
    SELECT ID from Table where Name='text''

不应该是

  

名称='文字'''

为什么SQL不能使用ADO识别双引号?

Select_SP使用类似这样的东西:

     SET @sql = 'SELECT ID from Table where Name='''+@name+''''
     Exec(@sql)

我是否正确编写了此SP?

1 个答案:

答案 0 :(得分:1)

简短的回答是,不要按照你的方式调用程序。请改用Command。这是来自内存,因为我目前没有在我面前的Windows系统,但它应该工作:

Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
Set Cmd.ActiveConnection = myConnectionVariableHere
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Select_SP"

'Note: if the above two lines don't work, replace them with the following
'cmd.CommandType = adCmdText
'cmd.CommandText = "Select_CP @name=?"

cmd.Parameters.Append cmd.CreateParameter("name", adVarChar, adParamInput, len(x), x)
Rs.Open cmd

现在,所有这一切,我不能告诉你为什么你的程序给出了特定的输出,因为你没有向我们展示它的代码。但我相当肯定ADO不会将一对单引号转换为双引号 - 不确定为什么你会期望它。

看到OP的编辑后进行编辑。除非绝对必须,否则不要以这种方式执行SQL。你只会让自己悲伤。我不知道你正在使用什么数据库,并且程序语法看起来并不熟悉,但在Oracle中你可以编写如下内容:

PROCEDURE sql_test(MyName IN VARCHAR2, MyCursor OUT SYS_REFCURSOR) IS
BEGIN
  OPEN MyCursor FOR SELECT id FROM some_table WHERE name = MyName;
END;