0

我制作了 3 个 Ajax 进程来同时运行以下代码。但是其中一个进程抛出异常,该消息显示“底层提供程序在打开时失败”。

try{
    orderRepository orderRepo = new orderRepository(); // get context (Mysql)

    var result = (from x in orderRepo.orders
          where x.orderid == orderno
          select new {x.tracking, x.status, x.charged }).SingleOrDefault();

    charged = result.charged;
}catch(Exception e){
    log.Error(e.Message); //    The underlying provider failed on Open.
} 

而且,我运行了之前失败的 1 个 Ajax 调用,然后它通过了。

它发生在 3 个(Ajax)进程中的 1 个,有时,5 个进程中的 2 个。

我猜是因为所有进程都尝试同时使用数据库。但我找不到解决方案。

这是我的连接字符串,

<add name="EFMysqlContext" connectionString="server=10.0.0.10;User Id=root;pwd=xxxx;Persist Security Info=True;database=shop_db" providerName="Mysql.Data.MySqlClient" />

任何人都知道解决方案或我可以尝试的东西,请告诉我。

谢谢

4

2 回答 2

0

这听起来像是一个问题,因为使用相同的用户名与 SQL Server 并发连接。您是否尝试过在使用存储库(或连接)对象后销毁/处置它?试试看:

 try{
       using( orderRepository orderRepo = new orderRepository()) // get context (Mysql)
        {
          var result = (from x in orderRepo.orders
              where x.orderid == orderno
              select new {x.tracking, x.status, x.charged }).SingleOrDefault();

        charged = result.charged;
    } // orderRepo object automatically gets disposed here
catch(Exception e){
        log.Error(e.Message); //    The underlying provider failed on Open.
    } }
于 2012-09-18T23:32:08.367 回答
0

不确定它是否重要,但您的提供商名称是否重要Mysql.Data.MySqlClientMySql.Data.MySqlClient如果区分大小写,这可能是原因)。

于 2014-07-06T18:35:03.990 回答