2014-01-14 226 views
2

我試圖確定DataView是否不包含數據。檢查DataView是否爲空

lsSql = "Select col1, col2 from table where tableId = " + Id; 
DataView loCheck = Global.db.GetDataView(lsSql); 
if (loCheck .Count > 0) 
{ 
    checkSelected= true; 
} else { 
    checkSelected= false; 
} 

當前,如果col1和col2爲空,則返回2行(null),checkSelected始終等於true。

如何查看DataView是否不包含任何數據?

+0

與他們打擾應用如果'col1'和'col2'都爲空,你想要假?或者只有一個是空的而不是另一個? – paqogomez

+0

如果設置爲1,我希望爲true。如果兩者均設置,則爲false。 – webdad3

+0

我想我可能誤解了你最後的評論。如果你的意思是「如果一個設置爲[如果]爲空,那麼假如兩者都設置爲[null]」那麼我的答案應該有。如果我誤解了,請澄清。 – paqogomez

回答

2

試試這個:

if (loCheck.Table.Rows.Count > 0) 
{ 
     checkSelected= true; 
} 
else 
{ 
     checkSelected= false; 
} 
+0

OP說過,即使值爲null,他也會得到兩行。這有什麼不同? – paqogomez

1

如果你想返回基於兩米欄是空的結果中的單個值,coalesce或NULLIF是SQL方法。 (NullIf是一回事,但只需要兩個參數,而我建議3)

"Select coalesce(col1, col2, 'false') as result from table where tableId = " + Id 

然後測試你的價值是微不足道的:

if(loCheck.Rows[0]["result"].ToString() == "false") 
    checkSelected= false; 
else 
    checkSelected= true; 
+0

我會小心在sql中使用字符串連接。參數更好地避免sql注入漏洞。 – paqogomez

1

您可以隨時根據長度的「選擇「的結果在兩列中查找null,但您需要確定條件。你是否關心這一行,如果任何一列中有一個值,或者如果任一列爲空,你是否認爲它被忽略...或者,你認爲它是否缺少數據,只有當兩列都爲空時...

chkSelected = loCheck.Table.Select("Col1 is NOT null AND Col2 is NOT null").Length > 0; 

然後,您可以將默認視圖的過濾器設置爲此子句以跳過NULL條目。

這也可以直接與原始查詢通過明確不包括空記錄,這樣你是不是隻需添加一個WHERE子句

where tableId = someKey AND (Col1 is not null AND Col2 is not null) 

where tableId = someKey AND (Col1 is not null OR Col2 is not null)