2011-07-11 25 views
3

爲什麼這不起作用?這是關於=附近的命令字符串語法的東西,但我似乎無法弄清楚,在線示例看起來完全一樣。 編輯:激活是一列。你從How to select data from database with many filter options?SQL查詢幫助,語法錯誤附近=

private void btnDist_Click(object sender, EventArgs e) 
{ 
    string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated In = '#NA'"; 
    SqlDataAdapter adapter = new SqlDataAdapter(cmdText, GetConnection()); 
    DataSet distDS = new DataSet(); 
    adapter.Fill(distDS); 

    dataGridView1.DataSource = distDS.Tables[0].DefaultView; 
} 

回答

6

如果你的數據庫列的名稱是Activated In(中間有空格),那麼你需要用方括號參照對象/列名時在查詢中,例如:

SELECT * FROM Inventory WHERE Rep <> '#NA' AND [Activated In] = '#NA' 

這是因爲SQL把空間作爲查詢語言的隔膜 - 用方括號「逃離」,在這個名稱(和其他字符)。

或者,如果該列僅被稱爲Activated那麼您不需要IN位 - 要麼測試是否相等,要麼測試以查看該值是否在給定範圍內,但不要同時執行這兩個操作。

-- Use this 
SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA' 
-- Or this 
SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated IN ('#NA', 'Some other value') 
+2

這就是爲什麼你應該避免在表設計中首先使用空格或關鍵字。如果這是一個尚未推出的新表格,我會立即修復該字段名稱。 – HLGEM

+0

@HLGEM,感謝您的指點,我仍然是一個小nooblet。 – Dani

+0

@Kragen,非常感謝答覆者,Activated In是(是)列名,所以括號解決了問題。甚至不知道實際的IN關鍵字是什麼 – Dani

4

變化

例子查詢到有沒有必要IN關鍵字

SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA'" 

IN的 - 當你想從列表或子查詢中過濾掉數據使用的存在。

1

Activated In = '#NA'"

這必須Activated In ('#NA')"Activated = '#NA'"
保留SQL中的In運算符。

2

In關鍵字的使用步驟如下:

...AND Activated IN ('#NA') 
...AND Activated IN ('#NA', 'other filter value', 'more filter values') 
1

取出=In

string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated In ('#NA')"; 

您也可能想使用=而不是In因爲你只指定一個項目。

string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND Activated = '#NA'"; 

如果Activated In是一列,然後使用:

string cmdText = "SELECT * FROM Inventory WHERE Rep <> '#NA' AND [Activated In] = '#NA'"; 
1

激活是列?那麼它應該是已激活In[已激活]