-
问题内容:向SQL Server的存储过程传递字符型参数时,如果这个参数中含有一个单引号怎么办?
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5285155
- 所属论坛:VFP
审核组:其他数据库开发
- 提问者:Code4Lain
解决者:zhang030219
- 感谢:wwwwb apple_8180 zhang030219
- 关键字:引号 变量 其他数据库开发 VFP 存储 查询
- 答案:
自己写了一个带有参数的存储过程
让用户通过客户端调用这个存储过程来执行SQL Server查询
可是如果这个字符型参数带有单引号,SQL Server就会报错,
请问如何解决?
是这样的
我是用vfp 连接 SQL Server,将vfp数据添加到SQL server表中
在我的SQL server 上有一个这样的存储过程:
CREATE PROCEDURE [dbo].[我的存储过程]
(@newDz [varchar](150))
AS
INSERT INTO 账单数据总库 (dz) VALUES (@newDz)
我vfp中是这样调用的
先用
SQLhandle=SQLSTRINGCONNECT(连接字符串) &&连接到我的SQL Server
exeString = "EXECUTE 我的存储过程 "+"'"+ TempDz+"'" &&要远程执行的字符串
TempDz就是 VFp表要转换到SQL server 的变量
然后SQLEXEC(SQLhandle,exeString) &&远程执行
这个存储过程和程序在TempDz 中不含有 单引号 '
是完全没有问题的
但是含有 单引号 ' 因为在SQL Server中指定的分隔符号就是 '
所以远程执行就会错误
例
tempDz = "aaa"
"EXECUTE 我的存储过程 "+"'"+ TempDz+"'" 就是EXECUTE 我的存储过程 'aaa'
tempDz = "aa'a"
"EXECUTE 我的存储过程 "+"'"+ TempDz+"'" 就是EXECUTE 我的存储过程 'aa'a'
后者就会报错
---------------------------------------------------------------
把单引号写成两个单引号即可
---------------------------------------------------------------
把变量TempDz中的单引号去掉或替换成其他字符吧(如换成两个单引号)
如:
tempDz = "aa'a"
tempDz=STRTRAN(tempDz,"'","''")
SQLEXEC(SQLhandle,'{CALL 存储过程名(?TempDz)}'
举一反三:向SQL Server传字符串时,如果字符串中含有一个单引号,
同样可以用此种方法换成两个单引号来解决
- 评价:
给朵鲜花(24)
扔个鸡蛋(6)