将NULL参数传递给SQL服务器查询
问题描述:
如何将空参数传递给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();
...
答
由于NULL不匹配任何内容(即使NULL = NULL为false),除了使用IS NULL语句之外,您别无选择。
答
在SQL中,null与其他值的行为有点不同 - 你不能仅仅将事情评估为being = null,因为这不起作用,你需要使用“myColumn is null”。
在你的情况下,当你需要匹配一个值或null时,你可能需要在where子句中使用case语句。
的读数的位:wikipedia
答
作为ocdecio提及,NULL不等于本身。但你有另一种选择。如果你担心NULL在这种情况下,你可以把一个空字符串在参数值,写这样的查询本身:
select * from myTable where COALESCE(myColumn,'') = ?
不完全正确的 - 有一个空未知字符串和之间的差异知道零长度的值 – 2009-07-07 19:40:12