gpt4 book ai didi

c# - OracleParameter 和 DBNull.Value

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:59 24 4
gpt4 key购买 nike

我们在 Oracle 数据库中有一个表,其中包含一个类型为 Char(3 Byte) 的列。
现在我们使用参数化的 sql 来选择一些带有 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 的行,
但是你会用“is null”而不是“= null”编写一个“普通”sql的情况
也很明显。

有人可以解释这种行为吗?如何编写需要条件来检查 DBNull 的参数化 sql?

谢谢

最佳答案

Null 是没有被设置为任何东西,所以你不会得到 '= null' 的正确行为。因为 null 是没有值,所以说“这个没有任何值的变量与另一个没有任何值的变量具有相同的值”是没有意义的。如果你没有值(value),你就不能拥有与其他东西相同的值(value)。

解决这个问题的一种方法是创建两个 sql 语句,一个接受参数,另一个接受 'is null'。然后使用“if”语句来选择要使用的一个。

语句 1:

string sql = "select * from TEST_TABLE where COLUMN_1 = :COLUMN_1  

声明 2:

string sql = "select * from TEST_TABLE where COLUMN_1 is null

除非您总是与 null 进行比较。然后,只需使用语句 2

关于c# - OracleParameter 和 DBNull.Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1701382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com