2012-01-19 33 views
2

我發現在驗證困難以下檢查的DBNull在C#

if(personDS.person[0].IdFk!= DBNull.Value) 

這是編譯時錯誤 - 不能應用於類型的操作數「的System.Guid和‘System.Dbnull’

+0

拋出異常。 –

+0

你可能會在這裏找到答案:stackoverflow.com/questions/211436/nullable-guid可空的GUID問題。 –

回答

4

我認爲你應該檢查:

0

您也可以覈對空的Guid

if (personDS.person[0].IdFk == Guid.Empty) 
0

嘗試

if(!(personDS.person[0].IdFk is System.DBNull)) 
+0

如果IdFk爲空,它將拋出異常。檢查DataSet自動生成的類以實現。該屬性拋出和異常。也許它可以通過列屬性進行更改,但對我來說不起作用。 –

0

標識是一個GUID,這是一個值類型,因此將永遠等於DBNull.Value。在我可以完全幫助之前,我需要知道personDS(DataSet可能?)和person(DataTable也許)的類型。假如這樣的話,說不定:

if (!personDS.person[0].IsNull("IdFK")) 

如果person不是一個DataTable但隨後的一類檢查或者IdFk == Guid.Empty,如果IdFk是一個GUID,或IdFk == null如果IdFkGuid?

0

是否將IdFk聲明爲可空? 居:

public Guid? Idfk 

如果是這樣,您可以:當您嘗試訪問IdFk因爲它不能爲空

if(personDS.person[0].IdFk.HasValue) 
+0

據我可以告訴這是完全廢話,由於以下原因:1)'公開''開始一個較低的'p'2)'?'後綴必須附加到類型,而不是標識符3)if 'personDS.person [0] .IdFK'確實爲null,代碼將拋出一個'InvalidOperationException',否則該條件將始終爲false,因爲'DBNull.Value'不等於其他任何東西,除了它本身和一個'Guid'永遠不會是DBNull類型的(並且它不會被編譯,因爲你不能比較'Guid'和'DBNull'而不用強制任何一個對象,這將做參考比較) – Nuffin

+0

真的,我沒有VS現在和編碼在VB這一時期。做了一些混淆:)無論如何編輯了答覆,謝謝。 –