2013-05-09 39 views
1

我輸入了存在於數據庫中的用戶名。名字只有名字和姓氏。所以中間的名字是空的,它被存儲在數據庫中作爲null。要獲取用戶的員工ID,我使用了以下查詢。但執行查詢後obj的值是null。名字和姓氏存儲在一個數組中。我檢查了他們的值。他們的價值觀是好的。通過sqlquery檢查數據庫中的空值C#

您能否告訴我爲什麼這個對象沒有獲取更多的價值。

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(); 

回答

3

你不能比較NULL使用等號 '=',使用 'IS NULL',而不是:

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

BTW,該查詢真的沒有很大的意義。也許:

empMiddleName IS NULL OR empMiddleName = @somevalue 

另外,請注意:你可能對SQL注入攻擊開放。使用參數而不是連接用戶輸入值。

+0

這worked..thanx了很多! – Seema 2013-05-09 16:00:36

1

empMiddleName ='「+ System.DBNull.Value +」'不正確。 NULL值沒有=運算符。

將其更改爲empMiddleName爲空。

0

將參數傳遞到下面的查詢中使用的SqlParameter對象:

​​
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() + "' ");