记录c#查询结果中的计数

时间:2015-01-10 12:16:36

标签: c# sql asp.net

如何在查询结果中获得总记录数

   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查询我需要结果计数,可以有人帮我 提前谢谢。

2 个答案:

答案 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)

如果您不需要FareOrderAmount(有点奇怪,因为您编写的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);