2015-11-09 54 views
0

我做錯了什麼?有沒有一些C#翻譯麻煩或什麼?你的SQL語法有錯誤

string commandText = 
    @"SELECT sc.sc_n, 
      sc.provider_n, 
      sc.sc_external_id, 
      sc.sc_external_name 
     FROM t_supplier_codification sc 
    WHERE sc.product_articul IS NULL 
     AND (sc.sc_external_name != "") 
     AND sc_count >= 1 
     AND provider_n=19 
     AND LENGTH(sc.sc_external_name)>=10 
     AND sc_external_name NOT LIKE '%лента%' 
     AND sc_external_name NOT LIKE '%камера%' 
     AND sc_external_name NOT LIKE '%Replica%' 
     AND sc_external_name NOT LIKE '%ET%' 
     AND sc_external_name LIKE '' 
    ORDER BY sc_external_name"; 

你在你的SQL語法錯誤:

檢查對應於你的MySQL服務器版本使用附近的「「正確的語法手冊)和sc_count> = 1 AND provider_n = 19和長度

+1

'(!sc.sc_external_name = '')' – lad2025

+2

你可能想逃生者在_name!=「」中使用雙引號或使用單引號 –

回答

2

您需要使用單引號而不是雙引號:

(sc.sc_external_name!='') 

由於雙引號會終止您的字符串。此外,單引號通常用於SQL中的字符串文字,雙引號用於列名稱(和其他對象)。

+1

這是一個逐字字符串,因此兩個雙引號讀爲單個雙引號,而不是終止字符串,但單引號是另一個選項。 – juharr

+0

SQL爲值使用單引號,雙引號用於對象。 – gmiley

+0

@juharr關於逐字字符串的好處,我錯過了,它可以逃脫。無論如何,單引號是更好的選擇,因爲它更符合標準。 – jpw

0

使用時與你要分隔雙引號用雙qoute開始的@逐字字符串。所以下面

@"(sc.sc_external_name!="")" 

實際上是字符串

(sc.sc_external_name!=") 

要解決它,你只需要增加兩個雙引號像

@"(sc.sc_external_name!="""")" 

或者更簡單地只使用單引號代替

@"(sc.sc_external_name!='')" 
0

你的雙引號將其更改爲單引號

0

雙引號應該被刪除,試試這個:

 string commandText = @"SELECT sc.sc_n,sc.provider_n,sc.sc_external_id,sc.sc_external_name 
       FROM t_supplier_codification sc 
       WHERE sc.product_articul IS NULL 
       AND (sc.sc_external_name!='') AND sc_count >= 1 AND provider_n=19 AND LENGTH(sc.sc_external_name)>=10 AND sc_external_name NOT LIKE '%лента%' 
       AND sc_external_name NOT LIKE '%камера%' AND sc_external_name NOT LIKE '%Replica%' AND sc_external_name NOT LIKE '%ET%' AND sc_external_name LIKE '' 
       ORDER BY sc_external_name";