执行时语法错误

Posted

技术标签:

【中文标题】执行时语法错误【英文标题】:incorrect syntax error While executing 【发布时间】:2014-02-17 13:38:26 【问题描述】:

我正在 SQL Server Express 中执行一条 SQL 语句

insert into dscl_sql_log (user_name, sql_time, sql) 
values ('ADMIN', '2/17/2014 7:05:45 PM', 'select * from cn_fieldsurvey_trn where unit_code = '03' and rownum < 10')

它给出了一个错误消息**incorrect syntax near '03'**

【问题讨论】:

你应该在字符串常量= ''03''周围使用双倍配额 【参考方案1】:
 insert into dscl_sql_log (user_name, sql_time, sql) values ('ADMIN', '2/17/2014 7:05:45 PM', 'select * from cn_fieldsurvey_trn where unit_code = ''03'' and rownum < 10')

如果您从文本框中获取值,那么强烈建议使用参数化查询来防止 SQL 注入攻击,并避免在传递的值中显式转义单个字符。

       string query=  @"insert into dscl_sql_log (user_name, sql_time, sql) values  " +
            " (" +
                  @"'ADMIN', '2/17/2014 7:05:45 PM',@sql "+
             ")";

        using (var cmd = new SqlCommand(query, conn))
        
            cmd.Parameters.AddWithValue("@sql", txtbox.Text);

            cmd.ExecuteNonQuery();
        

【讨论】:

感谢您的回答,但如果我从文本框中获取 sql 列的值怎么办。其实上面string LogQry = "insert into dscl_sql_log (user_name, sql_time, sql) values ('"+user_code+"', '" + DateTime.Now + "', '"+SqlText.ToString()+"')";是我在.cs页面中的代码。 你可以使用我的答案。但是由于您正在动态构建该查询,因此只需将该 ToString 中的一个引号替换为两个引号。顺便说一句,您的应用很可能容易受到 SQL 注入攻击。 应该使用@jean参数化查询【参考方案2】:

您需要用 2 个引号替换该引号,由于没有转义引号,您会收到错误。

insert into dscl_sql_log (user_name, sql_time, sql) values 
    ('ADMIN', '2/17/2014 7:05:45 PM',
replace('select * from cn_fieldsurvey_trn where unit_code = '03' and rownum < 10','''',''''''))

【讨论】:

【参考方案3】:

或者你可以这样使用:

insert into dscl_sql_log (user_name, sql_time, sql) values ('ADMIN', '2/17/2014 7:05:45 PM', 'select * from cn_fieldsurvey_trn where unit_code = ' + '03' + ' and rownum < 10')

但要小心 SQL 注入问题,就像他们说的那样!

【讨论】:

【参考方案4】:

尝试:

insert into dscl_sql_log (user_name, sql_time, sql) 
values ('ADMIN', '2/17/2014 7:05:45 PM', 'select * from cn_fieldsurvey_trn where unit_code = ''03'' and rownum < 10')

在字符串中使用 2 引号。

【讨论】:

以上是关于执行时语法错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥mybatis在执行查询时会报SQL语法错误?

语法错误时不执行“ERR”陷阱

在数据库“天气”上执行 SQL 查询时出错:“(”附近:语法错误

使用Perl执行Python脚本时,为什么不会出现语法错误?

javascript 使用 continue 时提示语法错误

在 vba 中执行 if 和 select 语句时出现语法错误