2012-02-07 147 views
1

我渴望知道最好的方法來檢查,如果數據集有記錄與否。 我一直在使用下面的代碼來檢查數據集是否有一些記錄。但我覺得有一些更好/最好的方法可以實現這一點。最佳做法有記錄

Dataset tableData = New Dataset(); 
if (_tableData.Tables.Count > 0 && _tableData.Tables[0].Rows.Count > 0) 
{ 
} 

如果我感覺正確,請分享一些知識。

感謝

+0

DataSet通常是多個DataTable的容器。我沒有看到知道某些DataSet表是否包含行的原因。難道它不太容易出錯,只能檢查現有記錄的相關DataTable嗎? (即使你的DataSet現在只包含一個表格,將來可能會改變) – 2012-02-07 10:10:14

+0

你是對的Tim。我會牢記這一點。 – 2012-02-07 10:15:22

回答

6

這將返回true如果有任何表的任何行。如果沒有表或沒有行,它將返回false

DataSet tableData; // ... instantiate DataSet 
bool hasRows = tableData.Tables.Cast<DataTable>() 
           .Any(table => table.Rows.Count != 0); 
+0

它引發一個錯誤,「不包含AsEnumerable()的定義.........」 – 2012-02-07 10:10:52

+0

@Deepak修復它 - thx指出錯誤 – 2012-02-07 10:14:26

+0

'Cast '返回'IEnumerable '所以沒有必要再次轉換它。 – Tomek 2012-02-07 10:31:11

0

您可以HasChanges()這將是隻包括數據的全成插入新的,刪除或修改行

真實支票
 DataSet dSet = new DataSet(); 
     if (dSet.HasChanges()) 
     { 

     } 

你也可以得到它通過DataSet.HasChanges(DataRowState)確切地知道發生新的行是否添加,修改或刪除

+0

如果行被修改,它會被設置爲true嗎?例如更新/刪除等。 – 2012-02-07 10:03:45

+0

是的,當然我說na。請參閱我給出的鏈接。 – 2012-02-07 10:09:47

+0

反正謝謝賽。 – 2012-02-07 10:24:53

2

如果在你的DataSet那麼你的邏輯多個表不會爲某些情況下工作。 這種方法較爲齊全:

bool HasRecords(DataSet dataSet) 
{ 
    foreach (DataTable dt in dataSet.Tables) if (dt.Rows.Count > 0) return true; 
    return false; 
} 
+1

感謝您的回答。我有一個查詢。正如你在談論數據集中的多個表一樣,通過這段代碼,如果有兩個表,並且第一個有行而第二個沒有行,我就會變成真。 – 2012-02-07 10:07:48

+0

正確,如果「DataSet」中有任何記錄,則無論在哪個表中,都會變爲true。如果你想確保所有的表都有記錄: '布爾HasRecords(DataSet的數據集) { \t布爾RES = TRUE; (dataTable dt in dataSet.Tables)if(dt.Rows.Count == 0)res = false; \t return res; }' – Tomek 2012-02-07 10:11:51

0

嗯好是不會做的工作,如果你有DataSet中的多個數據表。

可沒想到這裏我需要做的這是誠實的場合。如果我有類似的需求,我會在DataSet中查找表,因爲假設所有那些人都出於某種功能原因。

所以我可能只是檢查客戶表是否是空的,一個SELECT COUNT,因爲如果是在檢查什麼都沒有任何意義。

+0

正確。但在這裏我知道我只有一張桌子。所以只需檢查一張桌子。如果我選擇多個表格,我一定會採用不同的方法。好的一點,但。 – 2012-02-07 10:18:04