显示网格视图中的行数

本文关键字:网格 视图 显示 | 更新日期: 2023-09-27 18:34:57

我正在尝试使用标签显示网格视图中的行数。我使用了 SQL 计数语句,但它不起作用。问题是我只得到标签中显示的数字 1,这与我表中的行数不匹配!我已经发布了类似的问题,但不幸的是没有人给出明确的答案!

我的代码为:

Basket.ac

  public int td()
   {
       int customers;
        //I tried this select query but still gets number 1
       //String sql = String.Format("SELECT COUNT(*) FROM dbo.Baskets");
       string sql = string.Format("SELECT COUNT(*) FROM Baskets");
       customers = Db.RunQuery(sql).Rows.Count;
       //customers = Convert.ToInt32(Db.RunQuery(sql).Rows.Count);
       return customers;

    }

DataBaseConn.ac

 public class DataBaseConn
  {
   SqlConnection conn;
   SqlCommand cmd;
   DataTable tbl;
   private void Intialise(CommandType commandtype, string DataBase)
   {
    conn = new SqlConnection();
    cmd = new SqlCommand();
    //Requirements
    conn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ToString();
    cmd.Connection = conn;
    cmd.CommandType = commandtype;
    cmd.CommandText = DataBase;
    conn.Open();
  }
 public int RunProcedure(string Procedure, SortedList ParameterV)
  {
    Intialise(CommandType.StoredProcedure, Procedure);

    for (int i = 0; i < ParameterV.Count; i++)

        try
        {
            if (ParameterV.GetByIndex(i) != null)
                cmd.Parameters.AddWithValue(ParameterV.GetKey(i).ToString(), 
                                                 PrameterV.GetByIndex(i).ToString());
        }
        catch { ;}
    return RunUpdate();
   }
  public int RunUpdate(string InsDelUpd)
   {
    Intialise(CommandType.Text, InsDelUpd);
    return RunUpdate();
  }
   private int RunUpdate()
   {
    try
   {      
        int x = cmd.ExecuteNonQuery();
        conn.Close();
        return x;
     }
     catch (SqlException ex)
      {
        conn.Close();
        return ex.Number;
      }
   }
  public DataTable RunQuery(string Select)
   {
    Intialise(CommandType.Text, Select);
    tbl = new DataTable();
    tbl.Load(cmd.ExecuteReader());
    conn.Close();
    return tbl;
   }
 public bool EData(string selection)
  {
    if (RunQuery(selection).Rows.Count > 0)
        return true;
    else
         return false;
    }

 }

篮子.aspx

    lblQueue.Text = _b.td().ToString();

显示网格视图中的行数

您不想返回数据表的.Rows.Count - 对于count(*)查询,这将始终为 1(如 1 row(s) affected 中所示(。

相反,您应该考虑使用 ExecuteScalar 从查询返回第一行的第一列

我不确定您希望如何将其构建到DataBaseConn数据帮助程序类中,但它的要点是您需要以下顺序:

using (var conn = new SqlConnection(connectionStringHere))
using (var cmd = new SqlCommand(conn))
{
   cmd.CommandType = CommandType.Text;
   cmd.CommandText = "SELECT COUNT(*) FROM Baskets";
   return (int)cmd.ExecuteScalar();
}

编辑

如果您无法使用ExecuteScalar扩展DataBaseConn助手,那么我想您将能够使用返回 DataTable 的现有 RunQuery 方法。只需像这样刮掉第一行的第一列:

return Db.RunQuery(sql).Rows[0].Field<int>(0);

作为旁注,您可以考虑将DataHelper完全替换为Microsoft模式和实践数据应用程序访问块(DAAB(,或者,如果您愿意,可以考虑使用像实体框架这样的ORM。通过升级到主流数据访问封装,您无需花费太多时间来调试数据访问问题

,例如:)