2017-02-16 48 views
0

編輯:只是要清楚,我不是問(Null vs DBNull.Value)或(IsDBNull vs IsNull)。IsDBNull vs DBNull.Value,它們是一樣的嗎?


嗯,我總是用IsDBNull()評估數據庫字段和檢查值DBNull,但我注意到,在許多代碼示例,人們使用DBNull.Value爲了同樣的目的。具體方法如下:

在C#
If IsDBNull(obj) Then DoSomething()  ' ---> My approach 
If obj = DBNull.Value Then DoSomething() ' ---> Theirs. 

另外:

if (obj == DBNull.Value) {DoSomething();} 

我做了一些搜索,找出它們是否相同,或者如果有任何的差異,但找不到任何有用的文章這兩個顯示這兩個特定的評估方法在一起。

This MSDN link演示DBNull.Value.Equals如何做同樣的事情IsDBNull功能,但從來沒有提到/使用DBNull.Value的評價結果​​顯示,在不使用Equals功能。

所以,我真的不知道,是有其中之一,建議在這兩個選擇之間,從而任何實際的區別嗎?或者他們做的是完全一樣的東西?

+1

第二行應該使用'Is'而不是'=',但除此之外,它們在功能上是等效的。 'IsDBNull'方法可能在內部使用第二種方法。 – jmcilhinney

+0

[下面是.NET實現](https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlDataReader.cs#L2917) –

+0

@WillRay,即實現'SqlDataReader.IsDBNull'方法,它不是問題中指定的方法。上面代碼中的方法是'Microsoft.VisualBasic.Information.IsDBNull'。 – jmcilhinney

回答

0

不,它們不一樣。 DBNull.Value實際上是一個常量,而IsDBNull是一個返回true或false的函數。

IsDbNull是一個返回布爾值的測試標誌,並且是一個快捷表達式,用於如果語句。您仍然可以使用Obj = DBNull.value方法,但是IsDbNull是根據MS的首選方法。

但是,如果你想使用select case語句,你還需要,如果你想設置一個現場發回的使用DBNull.value對象

Select case Obj 
    Case DBNull.value 
    Case "Whatever" 
End Select 

當然,你還需要DBNull.Value爲空值。

它類似於Double.IsNaN和Double.NaN。

相關問題