我有我的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'");
我想要做的就是在此查詢檢索「計數」的值, 「返回」它作爲我的函數返回值。
我該怎麼做?
我有我的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'");
我想要做的就是在此查詢檢索「計數」的值, 「返回」它作爲我的函數返回值。
我該怎麼做?
由於SQL查詢不會返回一個數據集,但一個標,你應該使用.ExecuteScalar()
方法:
int count = (int)db.ExecuteScalar(System.Data.COmmandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'");
(這將是我們更容易,如果你告訴我們提供答案什麼類型的db
實例的......)
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"]);
我得到一個錯誤:無法用[]將索引應用於類型爲'System.Data.DataTable'的表達式 – Sev 2009-09-24 18:35:03
初始化數據集時,爲它創建一個數據表? – 2009-09-24 18:45:26
你也應該不使用內聯SQL來。 這個SELECT計數應該全部拋入存儲過程。 應該從您的應用程序數據訪問層調用存儲過程。
這就是可重用性的地方,你開始注意到你可能需要在你的網站/客戶端應用程序的各個地方調用這個函數。
只是一些提示!
你已經得到了你的問題的答案。我只想補充一點,如果表中包含大量數據,則可以通過在count函數中指定一個索引字段(例如主鍵)來顯着提高性能:''SELECT count(tableId)FROM Table .. 。「' – 2009-09-24 18:37:24
這是一個很好的觀點。謝謝。 – Sev 2009-09-24 18:54:10
「...通過指定一個索引字段可以獲得更好的性能......」。不知道爲什麼會這樣。性能的重要一點是,where子句中的列是否存在索引(在這種情況下,「where [Table]。[Field] ='test'」)。如果沒有,無論您是指定COUNT(*)還是COUNT(PKColumn),都將進行表掃描。 – Joe 2009-09-24 19:10:27