2012-02-01 6 views
0

테이블의 행 수를 가져 오려고합니다. 직원 테이블에서 한 행이 경우에도cmd.ExecuteScalar()는 0을 반환합니다.

cmd.CommandText = "SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM EMPLOYEE))"; 
Records = int.Parse(cmd.ExecuteScalar().ToString()); 

, 기록은 항상이 값이 0 ExecuteScalar는()가 0을 반환 이유는 무엇입니까?

+16

왜 모든 중첩 된 FROM 절입니까? "SELECT COUNT (*) FROM EMPLOYEE"를 사용하면 어떻게됩니까? –

답변

2

때문에 PRANAV 및 비 노드를 잘합니다. 그러나 당신은 당신의 문제를 직접 가리 키도록 상황을 단순화하려고 가정, 난 당신이 같은 임시 테이블에 이름을 줄 필요가 있다고 말할 것입니다 :

cmd.CommandText = "SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM EMPLOYEE) as T1) as T2"; 
Records = int.Parse(cmd.ExecuteScalar().ToString()); 

트릭을해야한다고.

추가 제안 사항 중 하나는 count (0)를 사용하지 않는 것입니다. 대신 count (0)를 사용하십시오. '*'는 뷰의 모든 데이터를 가져옵니다. 이는 카운트 기능에 대한 불필요한 성능 감소입니다.

0

이 시도 : EMPLOYEE 테이블의 행 수를 반환해야

cmd.CommandText = "SELECT COUNT(*) FROM EMPLOYEE"; 
int Records = (int)cmd.ExecuteScalar(); 

.

두 번 확인하려면 SQL 관리 스튜디오를 사용하여 SQL 서버와 동일한 코드를 실행하고 그 결과를 확인하십시오. 응용 프로그램이보고있는 데이터베이스와 다른 데이터베이스를 가리 키도록 구성 할 수 있습니까?

0

그냥 말 :

cmd.CommandText = "SELECT COUNT(*) FROM EMPLOYEE"; 
Records = int.Parse(cmd.ExecuteScalar().ToString()); 
0

이 시도 : 당신이 계산하려고하면 EMPLOYEE 테이블의 행의 수입니다

cmd.CommandText = "SELECT COUNT(*) FROM EMPLOYEE" 
Int record=(Int32)cmd.Executescalar(); 
0

SQL 요청이 유효하지 않으므로 0을 반환합니다.

항상 코드에 쓰기 전에 데이터베이스에 직접 요청 (예 : SQL Server를 사용하는 경우 SQL Server Management Studio 사용)을 시도해야합니다. 구문 오류가있어서 아무 것도 반환하지 않는 것을 보았을 것입니다. 당신은 당신이 쓴 SELECT * FROM 중첩 사용하려면

이 여기에 당신이 무엇을 기대 반환됩니다 유효한 SQL 요청의 모든 다른 답변이 언급 한 것처럼,

SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM EMPLOYEE) AS Foo1) AS Foo2 

을 어떤 경우에는, 이것은하지 않습니다 많은 의미가 있으며 다음과 같이 바꿔야합니다.

SELECT COUNT(*) FROM EMPLOYEE 
관련 문제