存储过程,并使用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?
答案 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;