如何在查询结果中获得总记录数
SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["con1"].ConnectionString);
string sql = "select Fare , OrderAmount FROM orderitems OI INNER JOIN Orders O ON O.OrderID = OI.OrderID WHERE PaymentStatusID = 1 AND o.orderid ="+Orderid;
SqlCommand comd = new SqlCommand(sql, con1);
con1.Open();
comd.ExecuteNonQuery();
以上是我的sql查询我需要结果计数,可以有人帮我 提前谢谢。
答案 0 :(得分:6)
ExecuteNonQuery
用于查询,如insert / update / delete。
改为使用ExecuteScalar
:
string sql = "select count(*) FROM orderitems OI INNER JOIN Orders O ON O.OrderID = OI.OrderID WHERE PaymentStatusID = 1 AND o.orderid ="+Orderid;
SqlCommand comd = new SqlCommand(sql, con1);
con1.Open();
int count = Convert.ToInt32(comd.ExecuteScalar());
答案 1 :(得分:1)
如果您不需要Fare
和OrderAmount
(有点奇怪,因为您编写的sql脚本包含它们),您可以用COUNT(*)
替换它们。
string sql = "select COUNT(*) FROM orderitems OI INNER JOIN Orders O ON O.OrderID = OI.OrderID WHERE PaymentStatusID = 1 AND o.orderid ="+Orderid;
然后你可以很容易地阅读这个,如下所示:
int numberOfRecords = Convert.ToInt32(comd.ExecuteScalar());
另一方面,如果您需要它们,您可以计算用于读取这些结果的SQL阅读器中的记录数,如下所示:
SqlDataReader sqlReader = comd.ExecuteReader();
int numberOfRecords = 0;
while(sqlReader.Read())
{
// do things
numberOfRecords++;
}
注意
在任何情况下,您都不能使用ExecuteNonQuery
方法,因为您想从数据库中读取内容。您不想创建,更新或删除某些内容。只有在后一种情况下我们才使用这种方法。
另一个重要的注意事项是关于您构建的查询的安全性,然后执行是为了避免字符串连接来传递参数值。这使得您的应用容易受到sql注入攻击,这是攻击的主要方式之一。您可以使用sql参数化查询,而不是这样做,如下所示:
string sql = "select Fare , OrderAmount FROM orderitems OI INNER JOIN Orders O ON O.OrderID = OI.OrderID WHERE PaymentStatusID = 1 AND o.orderid=@Orderid";
SqlCommand cmd = new SqlCommand(sql, con1);
cmd.Parameters.Add("@Orderid",OrderId);