如何将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();
...
答案 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,'') = ?