Delphi Mysql存储过程单引号麻烦

时间:2012-08-19 04:31:24

标签: mysql delphi stored-procedures

我有使用mydac存储过程组件的Delphi应用程序,它将utf8编码的xml文件的内容作为字符串参数。 当我将这个xml内容从文件复制粘贴到像

这样的过程时,它适用于navicat和其他数据库管理程序
CALL sp_saveit('<xml>garry&#39;s<otherdata> data data....</xml>);

但是当我尝试从delphi调用它时会抛出错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL sp_saveit('<?xml version=\"1.0\" encoding="UTF-8"?><Main><Detail z') at line 1

遵循这些步骤:

  1. delphi使用LoadfromFile MyStream.LoadFromFile(Sp_xmlfile);
  2. 查找并读取文件内容到TStringStream
  3. 然后将内容传递给存储过程T_ContentsSP.ParamByName('XmlFile').AsWideString := MyStream.DataString;
  4. 此外,我试图用delphi的zlib压缩这些数据并发送为blob,我试图用{更改&#39;,但结果是相同的。

    如何将带有单引号和双引号的长字符串作为sp的参数发送到delphi?

    p.s:对不起我的英语。

1 个答案:

答案 0 :(得分:1)

在您的帖子中,我看到您尝试使用常量值(I put this xml content copy-paste)和参数(T_ContentsSP.ParamByName('XmlFile'))。此外,尝试显示您使用的命令的错误文本,而不是其他命令。

使用参数时,无需做任何特殊准备。数据访问组件透明地将参数值发送到DBMS。如果它们具有跟踪输出,则检查跟踪,哪个库正在发送到DBMS。参数用法总是优先考虑文字用法!

当你使用常数时,你应该(more):

  • 将常量内的每个单引号加倍,并以'\'为前缀。因此,'将成为\''
  • 双引号而不需要特殊处理。
  • 可能禁用宏处理,因为'&amp;'可能是数据访问库中的宏说明符。