2014-10-07 43 views
0

讓我們想象下一種情況,我使用SQLite的ADO.NET數據提供程序,並希望通過他的姓名和電子郵件(電子郵件爲NULL)從SQLite數據庫中選擇一個用戶。我可以在SQLiteCommand中使用DBNull.Value

using (var cmd = new SQLiteCommand(conn)) 
{ 
    cmd.CommandText = "SELECT UserId FROM User WHERE [email protected] and [email protected]"; 
    cmd.Parameters.AddWithValue("Name", userName); 
    cmd.Parameters.AddWithValue("Email", ((object)userEmail) ?? DBNull.Value); 
    var user = (int?)cmd.ExecuteScalar() ?? 0; 
} 

因此,我無法獲得現有用戶。 問題是:我可以在SQLiteCommand中使用DBNull.Value嗎?

+0

可以顯示例如一些更多的代碼,你在哪裏分配userName的變量和USEREMAIL變量..?也只是好奇你爲什麼覺得需要返回Nullable(int?)你有沒有考慮使用SQLiteDataAdapter – MethodMan 2014-10-07 16:47:40

+0

@DJKRAZE:根據微軟「如果結果集中第一行的第一列未找到,空引用是回。」。請參閱[DbCommand.ExecuteScalar方法](http://msdn.microsoft.com/zh-cn/library/system.data.common.dbcommand.executescalar(v = vs.110).aspx) – 2014-10-07 16:51:06

+0

我知道ExecuteScalar的作用從來沒有見過任何人返回int這種方式..我只是好奇 – MethodMan 2014-10-07 16:52:52

回答

3

您將以= NULL結束,這是無效的,因爲沒有東西等於空。

你怎麼樣... WHERE [email protected] and ([email protected] or @Email IS NULL)

+2

我認爲你可以只添加參數爲'null'。無需將其轉換爲'DBNull.Value'。 – 2014-10-07 16:47:06

+0

... WHERE名稱= @名稱和(電子郵件= @電子郵件或@Email IS NULL) - 這意味着,如果您選擇「user1」與「email1」,它可以得到「user1」與電子郵件等於空 – 2014-10-07 19:17:38