2014-02-17 22 views
1

我執行在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'**

+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注入攻擊,並避免顯式轉義傳遞值中的單個字符。

 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 =「insert into dscl_sql_log(user_name,sql_time,sql)values('」+ 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')

但要小心,絲毫SQL注入問題像他們說的!

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報價的字符串。