CSDN=>FAQ=>FAQ 展示
  • 问题内容:向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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo