如何识别&在sql搜索中转义撇号

时间:2013-10-08 11:14:31

标签: c# sql-server

我在C#程序中有sql查询来搜索或过滤一些记录。当我使用apostrope传递一个字符串值时,它会在我的C#程序中抛出一些不正确的关键字错误。

我的示例输入

String Val= Tests of the 'convergence hypothesis' :  a critical note /  Daniel Cohen.

我的查询

string MySqlQry="SELECT bc.BibId,
   stuff(
           (SELECT ' ' + bsc.NormValue + ''
            FROM BibContents bsc
            WHERE bsc.bibid = bc.bibid
              AND bsc.tagno = '245'
            ORDER BY bsc.Sfld
            FOR xml path(''), root('MyString'), TYPE).value('/MyString[1]','varchar(max)') , 1, 1, '') AS Title,
   stuff(
           (SELECT ' ' + bsc.NormValue + ''
            FROM BibContents bsc
            WHERE bsc.bibid = bc.bibid
              AND bsc.tagno = '020'
            ORDER BY bsc.Sfld
            FOR xml path(''), root('MyString'), TYPE).value('/MyString[1]','varchar(max)') , 1, 1, '') AS ISBN,
   stuff(
           (SELECT ' ' + bsc.NormValue + ''
            FROM BibContents bsc
            WHERE bsc.bibid = bc.bibid
              AND bsc.tagno = '250'
            ORDER BY bsc.Sfld
            FOR xml path(''), root('MyString'), TYPE).value('/MyString[1]','varchar(max)') , 1, 1, '') AS Edition,
   stuff(
           (SELECT ' ' + bsc.NormValue + ''
            FROM BibContents bsc
            WHERE bsc.bibid = bc.bibid
              AND bsc.tagno = '260'
            ORDER BY bsc.Sfld
            FOR xml path(''), root('MyString'), TYPE).value('/MyString[1]','varchar(max)') , 1, 1, '') AS Publisher,
   (SELECT top(1) Value FROM BibContents
   WHERE TagNo='100'
   AND Sfld='a'
   AND BibId=bc.BibId) AS Author
   FROM BibContents bc
   WHERE (bc.NormValue LIKE '" + Val + "%'
   OR bc.NormValue LIKE '% " + Val + "%')
   AND bc.TagNo='245'";

model = db.ExecuteStoreQuery<PoDetails>(MySqlQry).ToList();

感谢您提供解决方案的任何帮助。

1 个答案:

答案 0 :(得分:0)

你只需要逃避单引号。

http://blog.sqlauthority.com/2008/02/17/sql-server-how-to-escape-single-quotes-fix-error-105-unclosed-quotation-mark-after-the-character-string/

在将'Val'插入语句之前:

Val = Val.Replace(“'”,“''”);

相关问题