1

我输入了数据库中存在的用户名。这个名字只有名字和姓氏。所以中间名是空的,它在数据库中存储为null. 要获取用户的员工 ID,我使用了以下查询。但执行查询后 obj 的值为null. 名字和姓氏存储在一个数组中。我检查了他们的价值观。他们的价值观还可以。

您能告诉我为什么该对象没有获取任何价值吗?

SqlCommand cmm1= new SqlCommand ();
cmm1.CommandText = ("Select empID from empPersonalInfo where empFirstName= '" + arr[0].ToString() + "' and empMiddleName= '" + System.DBNull.Value + "' and empLastName= '" + arr[2].ToString() + "' ");            
cmm1.Connection = conn;
obj = cmm1.ExecuteScalar();
4

5 回答 5

3

您不能使用等于 '=' 比较 NULL,请改用 'IS NULL':

cmm1.CommandText = ("Select empID from empPersonalInfo where empFirstName= '" + 
              arr[0].ToString() + "' and empMiddleName IS NULL and empLastName= '" + 
              arr[2].ToString() + "' ");    

顺便说一句,这个查询真的没有多大意义。也许 :

empMiddleName IS NULL OR empMiddleName =  @somevalue

另外,请注意:您可能会受到 SQL 注入攻击。使用参数而不是连接用户输入值。

于 2013-05-09T08:55:30.077 回答
2

用于比较字段与null使用empMiddleName IS NULL

您应该使用参数化查询来防止SQL 注入

于 2013-05-09T08:56:30.863 回答
1

empMiddleName= '" + System.DBNull.Value + "' 不正确。NULL 值没有 = 运算符。

将其更改为 empMiddleName is null 。

于 2013-05-09T08:56:17.227 回答
0

使用 SQLParameter 对象将参数传递给查询,如下所示:

SqlCommand command = 
        new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);

    command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
    obj = command.ExecuteScalar();
于 2013-05-09T08:58:45.260 回答
0
You need to check that middle name should be equal null or middle name should be equal to value you have passed in query.

我希望打击查询查询可以完全满足您的要求。

cmm1.CommandText = ("Select empID from empPersonalInfo where empFirstName= '" + 
                  arr[0].ToString() + "' and ((empMiddleName IS NULL) or(empMiddleName='"+arr[1].ToString()+"')) and empLastName= '" + 
                  arr[2].ToString() + "' ");   
于 2013-05-09T09:41:51.630 回答