【问题标题】: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''周围使用双倍配额

标签: sql tsql sql-server-express


【解决方案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 引号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        • 2020-02-07
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多