CJM*_*CJM 5 c# oracle null ado.net dbnull
我正在第一次尝试从 C# 访问 Oracle。我发现 Oracle 不喜欢VarChar参数具有值null(C#)。我本来希望会有一些隐式转换,但我很欣赏这种差异。
所以我需要捕获这些空值并提供DBNull.Value,当然吗?最明显的方法是使用合并运算符??:
param myParm = myObject.MyProperty ?? DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
但它不接受System.DBNull... 的值,所以我必须使用:
param myParm = myObject.MyProperty ?? DBNull.Value.ToString();
Run Code Online (Sandbox Code Playgroud)
...这肯定与以下内容相同:
param myParm = myObject.MyProperty ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)
..这也有效。
但我一直明白,根据 ANSI SQL 规则,空字符串 ("") != NULL 值...但它似乎在 Oracle 中。
无论如何,我的问题是,处理空字符串值的情况的最佳实用或理论方法是什么?是否有我尚未确定的巧妙替代方案?或者这只是我们刚刚接受的 Oracle 的另一个特质?
空字符串(“”)确实不等于 NULL 值,但那是因为 NULL 不等于任何东西(甚至不等于另一个 NULL)(这就是为什么你IS NULL在 SQL 语句中说而不是= NULL.
NULL 的意思是“No Value”,空字符串没有值,因此 Oracle 设计者认为空字符串和 NULL 没有区别。
param myParm = myObject.MyProperty ?? DBNull.Value;失败,因为 的两侧??必须是相同的类型。 MyProperty我假设 是一个字符串,而DBNull.Value是一个DBNull对象。