2009-09-24 68 views
1

我有我的C#cs文件運行查詢:ASP.net C#SQL COUNT(*)

DataSet ds = db.ExecuteDataSet(System.Data.CommandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 

我想要做的就是在此查詢檢索「計數」的值, 「返回」它作爲我的函數返回值。

我該怎麼做?

+1

你已經得到了你的問題的答案。我只想補充一點,如果表中包含大量數據,則可以通過在count函數中指定一個索引字段(例如主鍵)來顯着提高性能:''SELECT count(tableId)FROM Table .. 。「' – 2009-09-24 18:37:24

+0

這是一個很好的觀點。謝謝。 – Sev 2009-09-24 18:54:10

+0

「...通過指定一個索引字段可以獲得更好的性能......」。不知道爲什麼會這樣。性能的重要一點是,where子句中的列是否存在索引(在這種情況下,「where [Table]。[Field] ='test'」)。如果沒有,無論您是指定COUNT(*)還是COUNT(PKColumn),都將進行表掃描。 – Joe 2009-09-24 19:10:27

回答

11

由於SQL查詢不會返回一個數據集,但一個,你應該使用.ExecuteScalar()方法:

int count = (int)db.ExecuteScalar(System.Data.COmmandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 

(這將是我們更容易,如果你告訴我們提供答案什麼類型的db實例的......)

+0

Database db = DatabaseFactory.CreateDatabase - 這就是你所指的? – Sev 2009-09-24 18:31:37

+0

用你的建議,我得到一個錯誤,說明不能將類型對象隱式轉換爲int。 – Sev 2009-09-24 18:35:47

+0

你必須投。它。我更新了示例以解決您收到的錯誤。 – JohnFx 2009-09-24 18:37:44

1
DataSet ds = db.ExecuteDataSet(System.Data.CommandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 
return Convert.ToInt32(ds.Tables[0].Rows[0]["counter"]); 
+0

我得到一個錯誤:無法用[]將索引應用於類型爲'System.Data.DataTable'的表達式 – Sev 2009-09-24 18:35:03

+0

初始化數據集時,爲它創建一個數據表? – 2009-09-24 18:45:26

-2

你也應該不使用內聯SQL來。 這個SELECT計數應該全部拋入存儲過程。 應該從您的應用程序數據訪問層調用存儲過程。

這就是可重用性的地方,你開始注意到你可能需要在你的網站/客戶端應用程序的各個地方調用這個函數。

只是一些提示!