1

如何将空参数传递给 SQL 服务器查询。我有一个可以为空的 int 列的简单表。如果我传递一个 .NET 空值,我会收到一个 sql 错误。如果我通过 DBNull.Value,没有行匹配过滤器。有没有一种简单的方法可以在不使用 ISNULL 的情况下做到这一点。

    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

3 回答 3

4

由于 NULL 不匹配任何内容(即使 NULL = NULL 为假),您别无选择,只能使用 IS NULL 语句。

于 2009-07-07T19:15:37.270 回答
2

正如 ocdecio 提到的,NULL 不等于自身。但你确实有另一种选择。如果您在这种情况下担心 NULL,您可以在参数值中放入一个空字符串,然后像这样编写查询本身:

select * from myTable where COALESCE(myColumn,'') = ?
于 2009-07-07T19:22:57.613 回答
0

在 SQL 中,null 与其他值的行为有点不同 - 您不能只将事物评估为 is = null,因为这实际上不起作用,您需要改用“myColumn is null”。

在您的情况下,当您需要匹配一个值或空值时,您可能需要在 where 子句中使用 case 语句。

一点阅读:维基百科

于 2009-07-07T19:16:24.383 回答