将null参数传递给SQL Server查询

时间:2009-07-07 19:10:38

标签: sql sql-server oledb oledbparameter

如何将null参数传递给SQL Server查询。 我有一个带有可空int列的简单表。 如果我传递.NET null值,我会收到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();
...

3 个答案:

答案 0 :(得分:4)

由于NULL与任何内容都不匹配(即使NULL = NULL为false),除了使用IS NULL语句之外别无选择。

答案 1 :(得分:1)

在SQL中,null对其他值的作用有点不同 - 您不能仅仅将事物评估为= null,因为这不起作用,您需要使用“myColumn is null”。

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

一点阅读:wikipedia

答案 2 :(得分:1)

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

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