执行时语法错误
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 引号。
【讨论】:
以上是关于执行时语法错误的主要内容,如果未能解决你的问题,请参考以下文章
在数据库“天气”上执行 SQL 查询时出错:“(”附近:语法错误
使用Perl执行Python脚本时,为什么不会出现语法错误?