2012-07-26 31 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)