gpt4 book ai didi

c# - 在一种方法中构造多个查询的最佳方法 c# asp.net

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:24 25 4
gpt4 key购买 nike

我有一个页面加载方法,可以将带有 sql 查询的 asp 下拉列表加载到我的 SQL Server 2012 数据库中。我是新手,基本上独立学习了很多我正在从事的合作项目需要完成的工作。

我一直遇到连接未正确关闭以及我的连接池因我的应用程序的适度使用而崩溃的问题,因此我一直在努力改进我在后面的 c# 代码中执行查询的方式.但是我对自己对此的理解没有信心,所以我将发布一个我的代码示例,并希望更流利的人能够指导我一些。

string constr = ConfigurationManager.ConnectionStrings["CurrencyDb"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr)) {
using (SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.Category")) {
try {
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
con.Open();

//Populate Category Dropdown
DDCategory.DataSource = cmd.ExecuteReader();
DDCategory.DataTextField = "CategoryName";
DDCategory.DataValueField = "CategoryId";
DDCategory.DataBind();
}
catch (SqlException sqlex) {
throw new Exception("SQL Exception loading data from database. " + sqlex.Message);
}

catch (Exception ex) {
throw new Exception("Error loading Category data from database. " + ex.Message);
}
}

using (SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.SubCategory ORDER BY SubCategoryName")) {
try {
cmd.CommandType = CommandType.Text;
cmd.Connection = con;

//Populate SubCategory Dropdown
DDSubCategory.DataSource = cmd.ExecuteReader();
DDSubCategory.DataTextField = "SubCategoryName";
DDSubCategory.DataValueField = "SubCategoryId";
DDSubCategory.DataBind();
}
catch (SqlException sqlex) {
throw new Exception("SQL Exception loading data from database. " + sqlex.Message);
}

catch (Exception ex) {
throw new Exception("Error loading Subcategory data from database. " + ex.Message);
}
}
}

以上是我的页面加载方式上的2条8左右的查询。

我最近的错误是

已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。

这促使我提出这个问题,我在我的 Web.config 连接字符串中设置了 MultipleActiveResultSets=true 并且我的应用程序现在可以工作了,但我觉得好像这是一个补丁来覆盖可能糟糕的代码。

执行此操作的最佳做​​法是什么?提前致谢!

最佳答案

嗯,可能有多种方法,但我觉得您应该将所有这些查询包装在一个存储过程中,然后在您的代码后面调用该 SP。不要使用 DataReader,而是使用 DataSet 并用不同的结果集填充它。

您还可以使用 DataReader 实例的 NextResult() 方法来获取下一个 SELECT 结果并进行处理。

关于c# - 在一种方法中构造多个查询的最佳方法 c# asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com