2012-05-26 42 views
4

查找數據是否使用查詢返回的最簡單和最有效的方法是什麼?我使用DataTable,如sqlAdapter.Fill(_table1),然後執行_table1.Rows.Count以查看數據表是否有任何行。如果有任何行,C#中是否有任何類和函數只是給我提供的。我不需要行的數據。伯爵是我需要的。我對非常大的數據集運行這個查詢,所以我不想用所有的行信息填充數據表。如果查詢返回任何行計數,則爲C#SQL

+1

進行計數查詢。 –

回答

7
string myScalarQuery = "select count(*) from TableName"; 

SqlCommand myCommand = new SqlCommand(myScalarQuery, myConnection); 
myCommand.Connection.Open(); 
int count = (int) myCommand.ExecuteScalar(); 
myConnection.Close(); 

%的意見查詢波紋管的可能的優化: 選擇頂層1 * FROM表名

+0

我的理解是,你想要一個查詢來確定一個表是否包含任何行?那麼爲什麼不只是運行一個計數查詢 – TGH

+0

看起來不錯(+1)。那麼,除非不是一個靜態類型的查詢;-) *然而*,ExecuteScalar有一個'object'返回類型,所以Convert.ToInt32可能是有序的。 – 2012-05-26 00:26:05

+0

如果您只想查看行並且實際上不需要計數,也許SELECT TOP 1 1 FROM而不是* - 一旦它看到一行就停止處理。 – user1166147

6

最便宜的方法是使用SqlDataReader對象的HasRows財產
UPDATE:當然,最高效的SELECT查詢將會像「Select Top 1 1 FROM TableName」一樣,甚至不需要提取任何列數據。

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     if (rdr.HasRows) 
      ... 
    } 
} 
+0

SqlCommand在此中的外觀案件(爲了完整)?有沒有理由贊成這個COUNT? – 2012-05-26 01:09:12

+0

最慢的組件將始終是查詢本身,所以C#部分更不重要。 – TGH

相關問題