MySqlClient 异常:已经有一个打开的 DataReader 与此连接关联
MySqlClient exception: There is already an open DataReader associated with this Connection
我正在尝试从 ASP.NET 中的控制器从 MySql 数据库检索数据,主 class 注册为单例,其中包含从主控制器调用的方法检索数据或将数据插入数据库,现在确保将每个数据 reader 包装到“使用”语句中,一切似乎都正常......但是当我进行压力测试时(有时就像 3用户同时连接)我得到奇怪和不一致的 MySql 错误主要是:
已经有一个与此连接关联的打开的 DataReader。
我也试过:
- 手动关闭 reader 并处理它
- 我没有使用 connection.Open(),而是尝试了:connection.OpenAsync() 和 connection.OpenAsync().GetaAwaiter().GetResult();
运气不好。
- 在每个方法完成时关闭连接,并在每个其他方法调用之前重新打开连接,但运气不好。
这令人沮丧,我正在考虑是否完全不使用 MySql?但是迁移到其他东西值得吗?
如果我是你,我不会将主 class 注册为单例,你可以在单例中使用调用数据库的方法。将 class 注册为单例时,意味着在应用程序启动时只能为该 class 创建一个实例。因此,当您对三个用户进行压力测试时,它可能会导致问题,因为您只有一个实例 main class.
我建议在启动时像下面这样注册你的 mysql 数据库 class:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MySqlConnection>(_ => new
MySqlConnection(Configuration["ConnectionStrings:Default"])); //Your connectionstring here
}
通过以上注册,您可以使用依赖注入访问控制器中的 MySql 数据库,并在您的控制器中调用它 Action
:
private readonly MySqlConnection _db;
public CheckoutController(MySqlConnection db)
{
_db = db;
}
public ActionResult Index()
{
var data = _db.data.ToList();
return View(data);
}
这是我为 MySql.Net Core 连接器找到的 link:
https://mysqlconnector.net/tutorials/connect-to-mysql/
我正在尝试从 ASP.NET 中的控制器从 MySql 数据库检索数据,主 class 注册为单例,其中包含从主控制器调用的方法检索数据或将数据插入数据库,现在确保将每个数据 reader 包装到“使用”语句中,一切似乎都正常......但是当我进行压力测试时(有时就像 3用户同时连接)我得到奇怪和不一致的 MySql 错误主要是:
已经有一个与此连接关联的打开的 DataReader。
我也试过:
- 手动关闭 reader 并处理它
- 我没有使用 connection.Open(),而是尝试了:connection.OpenAsync() 和 connection.OpenAsync().GetaAwaiter().GetResult(); 运气不好。
- 在每个方法完成时关闭连接,并在每个其他方法调用之前重新打开连接,但运气不好。
这令人沮丧,我正在考虑是否完全不使用 MySql?但是迁移到其他东西值得吗?
如果我是你,我不会将主 class 注册为单例,你可以在单例中使用调用数据库的方法。将 class 注册为单例时,意味着在应用程序启动时只能为该 class 创建一个实例。因此,当您对三个用户进行压力测试时,它可能会导致问题,因为您只有一个实例 main class.
我建议在启动时像下面这样注册你的 mysql 数据库 class:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MySqlConnection>(_ => new
MySqlConnection(Configuration["ConnectionStrings:Default"])); //Your connectionstring here
}
通过以上注册,您可以使用依赖注入访问控制器中的 MySql 数据库,并在您的控制器中调用它 Action
:
private readonly MySqlConnection _db;
public CheckoutController(MySqlConnection db)
{
_db = db;
}
public ActionResult Index()
{
var data = _db.data.ToList();
return View(data);
}
这是我为 MySql.Net Core 连接器找到的 link: https://mysqlconnector.net/tutorials/connect-to-mysql/