2009-07-07 129 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