我们在Oracle数据库中有一个表,其中包含一个Char类型为(3字节)的列。
现在我们使用参数化的SQL选择一些行用DBNull.Value和它不工作:OracleParameter和DBNull.Value
OracleCommand command = null;
OracleDataReader dataReader = null;
string sql = "select * from TEST_TABLE where COLUMN_1 = :COLUMN_1";
try
{
OracleConnection connection = (OracleConnection) dbConnection;
command = new OracleCommand(sql, connection);
OracleParameter param_1 = new OracleParameter("COLUMN_1", OracleDbType.Char);
command.Parameters.Add(param_1);
param_1.Value = DbNull.Value;
dataReader = command.ExecuteReader();
int recordCount = 0;
while(dataReader.Read() == true)
{
recordCount++;
}
Console.WriteLine("Count = " + recordCount); // is 0
}
[...]
我错过了什么?我们明确地有一些行包含一个DBNull,
但是你会写一个'正常'的SQL的情况是“空”而不是“=空”
也是显而易见的。
有人可以解释这种行为吗?你如何写一个参数化的SQL,你需要一个条件来检查DBNull?
感谢
当您这样做时,请注意Oracle不会索引空值,可能会导致查询计划效率低下 – erikkallen 2009-11-19 10:07:20