2012-05-26 11 views
4

쿼리를 사용하여 데이터가 반환되는지 찾는 가장 간단하고 효율적인 방법은 무엇입니까? 난 DataTable 같은 sqlAdapter.Fill(_table1)을 사용하고 다음 _table1.Rows.Count 데이터 테이블에 어떤 행이 있는지보고 있어요. C#에 어떤 행이있을 경우 나에게주는 모든 클래스와 함수가 있습니까? 나는 행의 데이터가 필요 없다. 그냥 내가 필요로하는 것입니다. 매우 큰 데이터 집합에 대해이 쿼리를 실행하고 있으므로 모든 행 정보로 데이터 테이블을 채우고 싶지 않습니다.C# 쿼리에서 행 수가 반환되는 경우

+1

카운트 쿼리를 만듭니다. –

답변

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

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

울부 짖는 소리 코멘트 당 쿼리의 가능한 최적화 :

+0

필자는 테이블에 행이 있는지를 쿼리가 확인하기를 원합니다. 카운트 쿼리를 실행하지 않는 이유는 무엇입니까? – TGH

+0

나에게 좋을 것 같습니다 (+1). 글쎄, 정적 쿼리를 제외하고 ;-) * 그러나 ExecuteScalar는'object' 리턴 타입을 가지고 있기 때문에 Convert.ToInt32가 순서대로 존재할 수 있습니다. –

+0

단지 행을보고 싶지만 실제로는 카운트가 필요하지 않은 경우 * 대신에 TOP 1 1 FROM을 SELECT하면 행을 보는 즉시 처리를 중지합니다. – user1166147

6

가장 저렴한 방법은 SqlDataReader 개체의 HasRows에게 재산
UPDATE을 사용 TABLENAME FROM 선택 상위 1 * : 물론, 가장 효율적인 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 명 이상을 부탁하는 이유가 있습니까? –

+0

가장 느린 구성 요소는 항상 쿼리 자체이므로 C# 부분은 그다지 중요하지 않습니다. – TGH

관련 문제