2014-02-17 3 views
1

Я уверен, выполнение SQL заявление, в SQL Server Expressнеправильно синтаксическая ошибка При выполнении

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'**

+0

Вы должны использовать двойные квоты вокруг строковой константы '= '' 03''' – valex

ответ

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 Injection Attacks и избегать явного исключения одиночных символов в передаваемом передаваемом значении.

 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(); 
     } 
+0

Спасибо за ответ, но что делать, если я получаю значение столбца ** sql ** из текстового поля. Фактически 'string LogQry =" вставить в значения dscl_sql_log (имя_пользователя, sql_time, sql) ('"+ user_code +"', '"+ DateTime.Now +"', '"+ SqlText.ToString() +"') " ; ' - это мой код на странице .cs. – Ravi

+0

Вы можете использовать мой ответ. Но так как вы динамически создаете этот запрос, просто замените одну цитату на две кавычки в этой ToString. Кстати, ваше приложение похоже на склонность к атакам SQL-инъекций. – jean

+0

Должен использоваться параметризованный запрос @jean –

0

Необходимо заменить эти кавычки на 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','''','''''')) 
0

Или вы можете использовать, как это:

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')

Но будьте осторожны WHIT вопросы SQL Injection как они сказали!

0

попробовать:

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 цитаты в строках.

Смежные вопросы