【问题标题】:How to retrieve the count of the number of rows in asp.net mvc from sql database?如何从sql数据库中检索asp.net mvc中的行数?
【发布时间】:2016-11-26 17:34:12
【问题描述】:

如果基于查询返回的行数大于 0,我正在尝试打印一些内容:

using (SqlConnection con = new SqlConnection("ConnectionString")){
  con.Open();
  string query = "SELECT COUNT(*) FROM Some_Table WHERE Val > 5";
  SqlCommand cmd = new SqlCommand(query, con);
  cmd.ExecuteNonQuery(); // get the value of the count
  if (count > 0) 
  {
    Console.WriteLine("Returned more than 0 rows");
  }
  else
  {
    Console.WriteLine("Did not return more than 0 rows");
  }
  Console.ReadLine();
}

如何找到返回的行数?

【问题讨论】:

标签: c# mysql asp.net


【解决方案1】:

即使不存在任何行,您的查询也始终返回一行。如果您的 WHERE 条件不存在任何行,它将返回 0

使用SqlCommand.ExecuteScalar Method ()

using (var con = new SqlConnection("ConnectionString"))
{
  con.Open();
  string query = "SELECT COUNT(*) FROM Some_Table WHERE Val > 5";

  using (var cmd = new SqlCommand(query, con))
  {
      int rowsAmount = (int)cmd.ExecuteScalar(); // get the value of the count
      if (rowsAmount > 0) 
      {
          Console.WriteLine("Returned more than 0 rows");
      }
      else
      {
          Console.WriteLine("Did not return more than 0 rows");
      }

      Console.ReadLine();
}

ScalarValue 将返回查询结果第一行的第一列。因此,对于您的查询,这是检索所需信息的更有效方法。

【讨论】:

  • WebMatrix 中的数据库助手比过于冗长的 SqlCommand 方法更易于阅读和使用——对于新手来说,这家伙似乎更好。
  • @JamesHarcourt,我认为这是基于意见的。我认为,对于新手来说,了解 ADO.NET 的工作原理要好得多。
【解决方案2】:

您可以这样做,因为ExecuteNonQuery - 返回受影响的行数。

int numberOfRecords = cmd.ExecuteNonQuery();
if (numberOfRecords  > 0) 
{
  Console.WriteLine("Returned more than 0 rows");
}
else
{
    Console.WriteLine("Did not return more than 0 rows");
}

【讨论】:

  • 这不会返回 1 吗?
  • 这不适用于 OP 的查询 - SELECT COUNT(*) 将始终返回 1 行
  • 非常感谢@Sajeetharan。
  • 但是,我在使用它时遇到了问题。
【解决方案3】:

SQLClient Command 对象的 ExecuteScalar() 方法专门用于从查询中返回单个值。它在代码和性能方面更高效。

using (SqlConnection conn = new SqlConnection("ConnectionString"))
{
conn.Open();
string query = "SELECT COUNT(*) FROM Some_Table WHERE Val > 5";
SqlCommand command = new SqlCommand(query, con);
Int32 count = (Int32) cmd.ExecuteScalar()
}

【讨论】:

    【解决方案4】:

    使用DataSet 获取计数

    SqlCommand cmd = new SqlCommand(query, con);
    
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;
    DataSet ds = new DataSet();
    
    da.Fill(ds);
    
    var count = ds.Tables[0].Rows.count;
    

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 2023-03-11
      • 2016-03-17
      • 2017-04-12
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多