我正在尝试在运行以下查询时获取记录总数:
var cmd =new SqlCommand("SELECT * FROM Issue where BookID = @bid and IssueDate = @idate order by IssueDate desc", conn);
cmd.Parameters.AddWithValue("bid", bookid);
cmd.Parameters.AddWithValue("idate", DateTime.Now);
int val = cmd.ExecuteNonQuery();
数据库中有可用的记录,但val
始终返回-1。
答案 0 :(得分:6)
问题:您正在尝试执行查询,该查询从表中返回实际记录,但不返回记录计数。
解决方案:要从表中获取总记录数,您需要按以下方式调用查询:
<强>语法:强>
SELECT COUNT(*) FROM [TABLENAME];
注意:要阅读记录计数,您可以调用ExecuteReader()
或ExecuteScalar()
方法。
但我强烈建议在只有一个记录/值要阅读时调用ExceuteScalar()
。
编辑:此处您不需要order by子句,因为记录顺序不会影响计数值。
试试这个:
var cmd =new SqlCommand("SELECT COUNT(*) FROM Issue where BookID = @bid and
IssueDate = @idate");
cmd.Parameters.AddWithValue("bid", bookid);
cmd.Parameters.AddWithValue("idate", DateTime.Now);
int totalRecords = Convert.ToInt32(cmd.ExecuteScalar());
答案 1 :(得分:0)
您可以遍历所有记录或进行其他查询以自行计算。
另外,请勿忘记将SqlCommand
包装到using
语句,因为它会实现IDisposable
接口。
答案 2 :(得分:0)
来自MSDN:
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。
因此,您应该使用已经提出的基于COUNT的解决方案。