我們在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