查询始终返回-1不知道原因。有人请解释一下。计数值始终为-1。
string query = "SELECT COUNT(*) AS Emails FROM users";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@email", email);
try
{
connection.Open();
count = command.ExecuteNonQuery();
if (count > 0)
return "Something Wrong1";
}
catch
{
return "Something Wrong2";
}
return count + "Every thing ok";
}
答案 0 :(得分:4)
这是因为ExecuteNonQuery
不返回查询结果,它只是在SQL服务器上执行它。返回值是语句影响的行数,当语句不影响任何行时为-1。 ExecuteNonQuery
(顾名思义)不是用于返回查询结果,而是用于运行更改数据的语句(例如INSERT,DELETE,UPDATE)。文档声明:
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。 (...)对于所有其他类型的 语句,返回值为-1。如果发生回滚,则返回 值也是-1。
您可以使用:
count = (int)command.ExecuteScalar();
获得您正在寻找的计数。 docs for ExecuteScalar
中还有一个示例。
答案 1 :(得分:2)
您需要ExecuteScalar
而不是ExecuteNonQuery
来检索计数值。
答案 2 :(得分:1)
我想你或许你的SQL语句是什么意思:
SELECT COUNT(*) FROM users WHERE Email = @email
除此之外,您必须使用ExecuteScalar
方法来检索计数。
答案 3 :(得分:0)
我不是C#专家,但command.ExecuteNonQuery()
似乎不对......毕竟这是查询!