2012-02-01 12 views
0

テーブルの行数を取得します。従業員テーブルの1行があっても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とのVinodが正しい、EMPLOYEE表の行数です。トリックを行う必要があります

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

:しかし、あなたは自分の問題を直接指すように自分の状況を簡素化しようとすると仮定すると、私はあなたがこのようなあなたの一時テーブルに名前を与える必要があると言うでしょう。

もう1つの提案は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

はこのお試しください:あなたは計算しようとしている何

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 
関連する問題