如何使用存储过程从 ASP.NET 记录计数?

Posted

技术标签:

【中文标题】如何使用存储过程从 ASP.NET 记录计数?【英文标题】:How to record count from ASP.NET using stored procedure? 【发布时间】:2021-06-19 17:37:36 【问题描述】:

我试图输出总共有 5 个存款人的数量,但是当我运行程序时它只输出 1 个。我为此使用了存储过程。我认为在下面的代码中缺少某些东西,我不知道。我尽力在网上搜索。

protected void Page_Load(object sender, EventArgs e)

    if (!IsPostBack)
    
        CountAllUsers();
    


protected void CountAllUsers()

    using (mysqlConnection mycon = new MySqlConnection(constring))
     
        mycon.Open();
        MySqlCommand cmd = new MySqlCommand("countallusers", mycon);
        cmd.CommandType = CommandType.StoredProcedure;
        MySqlDataAdapter adx = new MySqlDataAdapter(cmd);
        DataSet ds= new DataSet();
        adx.Fill(ds);

        mycon.Close();

        lblDepositors.Text = ds.Tables[0].Rows.Count.ToString();
    

【问题讨论】:

您不需要存储过程,也不需要使用DataAdapter - 只需在MySqlCommand 中运行SELECT COUNT(*) FROM tableName 查询。 @Dai 可以。谢谢! 【参考方案1】:

您可以使用ExecuteScalar进行记录数的查询。将TABLE_NAME 替换为您的表格。

仅供参考,您不必调用mycon.Close();,因为您应用 using 语句,当它结束时,它将自动处理连接。

更新: 根据@Dai 的建议,为Disposable 最佳实践添加了使用MySqlCommand 块。

protected void CountAllUsers()

    using (MySqlConnection mycon = new MySqlConnection(constring))
      
        using (MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM TABLE_NAME", mycon)) 
        
            cmd.CommandType = CommandType.Text;
            mycon.Open();

            var count = Convert.ToInt32(cmd.ExecuteScalar());
            lblDepositors.Text = count.ToString();
               
    

MySqlCommand.ExecuteScalar Method

ExecuteScalar 方法从数据库中检索单个值(例如,聚合值)。

【讨论】:

您也应该将命令包装在 using 块中。 好的,我认为最好将 MySqlCommand 与 using 块一起应用,因为 Dispose 方法支持它,并在流程结束后应用最佳实践来释放资源。无论如何感谢您的推荐。【参考方案2】:

我已经解决了。谢谢!

protected void CountAllUsers()
    
        using (MySqlConnection mycon = new MySqlConnection(constring))
        
            
            mycon.Open();
            MySqlCommand cmd = new MySqlCommand("SELECT COUNT(id) as count from depositors_tbl", mycon);
            MySqlDataAdapter ada = new MySqlDataAdapter();
            DataSet dt = new DataSet();
            ada.SelectCommand = cmd;
            ada.Fill(dt);
            mycon.Close();

            lblDepositors.Text = dt.Tables[0].Rows[0]["count"].ToString();
        

    

【讨论】:

你不需要使用MySqlDataAdapter - 你的代码比它需要的更复杂。另外,MySqlDataAdapter 不支持异步 IO。

以上是关于如何使用存储过程从 ASP.NET 记录计数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用asp.net通过下拉列表搜索记录

如何从 ASP.NET 调用具有多个输入值的 MySQL 存储过程

如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值

asp.net mvc 从视图中的文本框获取数据返回存储过程以编辑记录

如何在 asp.net 核心中从返回零计数的主体正确映射数组

如何从 adodb 记录集中访问存储过程中的变量?