2012-02-01 53 views
0

我想獲得一個表的行數。cmd.ExecuteScalar()返回0

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

即使在員工表1行,記錄總是有值爲0 爲什麼的ExecuteScalar()返回0?

+16

爲什麼所有的嵌套FROM子句?如果您只是使用「SELECT COUNT(*)FROM EMPLOYEE」,會發生什麼情況? – 2012-02-01 09:42:23

回答

2

你正在嘗試計算是行EMPLOYEE表的數量,因此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

試試這個:

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

應該返回EMPLOYEE表的行數。

要仔細檢查,請使用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

它返回0,因爲你的SQL請求無效。

您應該總是在將代碼寫入代碼之前,直接對數據庫嘗試您的請求(例如,如果您使用的是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