显示网格视图中的行数
本文关键字:网格 视图 显示 | 更新日期: 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。通过升级到主流数据访问封装,您无需花费太多时间来调试数据访问问题