2012-07-26 22 views
1

我有4條記錄在我的SQL表中,我正在做一個SQL select語句來選擇記錄基於一定的標準,但我不是選擇任何記錄。有人可以幫忙嗎?我的C#SQL Select語句沒有拿起我的表中的任何記錄

這裏是我的SELECT語句:

string Sql = ""; 
Sql = @"SELECT * FROM " + _dtlName + " 
     WHERE Shipper_No = '" + sidNo + "' 
     AND Job_Code != '" + "R" + "'"; 

我有3條記錄有一個具有R一個NullJob_Code1記錄。

此基礎上,我應該皮卡3條記錄與NULLJob_Code返回0記錄

+3

你是否已經用一些預期的參數將SQL直接測試到數據庫中?你有輸出你的SQL字符串,以確保它匹配工作測試用例嗎? – Dpolehonski 2012-07-26 16:14:22

+0

嘗試擺脫where子句中的Shipper_No部分,以確保這不是問題。 – 2012-07-26 16:14:53

回答

3

我懷疑問題是任何非空值和空值之間的比較不會返回true或false值,而是null。所以,你的查詢也許應該是:

string sql = "SELECT * FROM " + _dtlName + " WHERE Shipper_No = @ShipperNo " + 
      "AND (Job_Code IS NULL OR Job_Code != 'R')"; 

(請注意,我已經提取的參數爲Shipper_No - 你不應該在你的SQL一樣,包括直接價值顯然你需要再設置參數。值在SQL命令中。)

還要注意,<>在SQL中更常見,表示「不等於」,但我相信T-SQL允許以任一種形式。

+0

謝謝Jon,工作很棒!有一件事,我不確定我是否明白Shipper_No = @ShipperNo的含義?是不是在我的參數「sidNo」中設置值? – hmakled 2012-07-26 19:50:22

+0

@hmakled:不,它不是。您的代碼將值*直接放入SQL *中。我的代碼在SQL中放置了一個*佔位符*,然後單獨傳遞值。這意味着該值可以包含任何想要的數據(包括引號),而不會影響SQL中的代碼。使用參數化SQL有許多好處 - 主要是避免SQL注入攻擊。看到http://bobby-tables.com – 2012-07-26 20:00:49

0

嘗試,

Sql = @"SELECT * FROM " + _dtlName + " WHERE Shipper_No = '" + sidNo + "' AND Job_Code NOT IN ('R')"; 
+0

嘿吉姆謝謝你的反饋。我無法得到「Job_Code NOT IN('R')」的工作。保留一個錯誤說'(R') – hmakled 2012-07-26 19:53:51

0

我覺得您的查詢應該是更喜歡這一點,因爲你要選擇的NULL值。

string Sql = String.Format("SELECT * " + 
          "FROM {0} " + 
          "WHERE Shipper_No = {1} AND " + 
          "  Job_Code IS NULL", 
          _dtlName, sidNo) 
相關問題