2009-07-07 90 views
1

如何將空參數傳遞給SQL服務器查詢。 我有一個簡單的表,可以爲null的int列。 如果我傳遞一個.NET空值,我得到一個sql錯誤。如果我傳遞了DBNull.Value,則沒有行匹配過濾器。有沒有簡單的方法來做到這一點,而不使用ISNULL。將NULL參數傳遞給SQL服務器查詢

OleDbConnection connection = new OleDbConnection(); 
    connection.ConnectionString = ...; 
    connection.Open(); 
    OleDbCommand cmd = new OleDbCommand(); 
    cmd.Connection = connection; 
    cmd.CommandText = "select * from myTable where myColumn = ?"; 
    OleDbParameter parameter = cmd.Parameters.Add(null, OleDbType.Integer); 
    parameter.DbType = System.Data.DbType.Int32 ; 
    parameter.IsNullable = true; 
    parameter.Value = DBNull.Value; // no row returned 
    parameter.Value = null; // sql error 
    var reader = cmd.ExecuteReader(); 
... 

回答

4

由於NULL不匹配任何內容(即使NULL = NULL爲false),除了使用IS NULL語句之外,您別無選擇。

1

在SQL中,null與其他值的行爲有點不同 - 你不能僅僅將事情評估爲being = null,因爲這不起作用,你需要使用「myColumn is null」。

在你的情況下,當你需要匹配一個值或null時,你可能需要在where子句中使用case語句。

的讀數的位:wikipedia

1

作爲ocdecio提及,NULL不等於本身。但你有另一種選擇。如果你擔心NULL在這種情況下,你可以把一個空字符串在參數值,寫這樣的查詢本身:

select * from myTable where COALESCE(myColumn,'') = ? 
+0

不完全正確的 - 有一個空未知字符串和之間的差異知道零長度的值 – 2009-07-07 19:40:12