cmd.ExecuteScalar()返回0

时间:2012-02-01 09:40:09

标签: c# asp.net ado.net

我想得到一个表的行数。

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

即使员工表中有1行,记录的值也始终为0。 为什么ExecuteScalar()返回0?

5 个答案:

答案 0 :(得分:2)

您要计算的是EMPLOYEE表中的行数,因此Pranav和Vinod是正确的。但假设你试图简化你的情况只是为了直接指出你的问题,我会说你需要给你的临时表命名如下:

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

这应该可以解决问题。

另外一个建议是不要使用count(0);而是使用count(0)。 '*'在视图中显示所有数据;这是计数函数不必要的性能下降。

答案 1 :(得分:0)

试试这个:

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

那应该返回EMPLOYEE表中的行数。

要仔细检查,请使用SQL管理工作室针对SQL Server执行相同的代码,并查看结果。您的应用程序是否可能配置为将不同的数据库指向您正在查看的数据库?

答案 2 :(得分:0)

请说:

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分: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