C# &引用;基础提供程序在打开时失败";使用大型电子表格

C# &引用;基础提供程序在打开时失败";使用大型电子表格,c#,database,asp.net-mvc-3,entity-framework,connection-string,C#,Database,Asp.net Mvc 3,Entity Framework,Connection String,我正在使用实体框架上传一个大型电子表格(14k行),并对我的数据库进行更新。如果我一行一行地设置代码,那么每次更新都会按预期进行。然而,一旦我跳出代码,我就开始看到抛出了这个异常:基础提供程序在打开时失败了 这让我很反感,因为我们在整个站点中都使用实体框架,它工作得很好,所以我知道我们的连接字符串不是问题所在。事实上,当电子表格变小时,这个页面甚至可以很好地处理上传。然而,这是一个很好的衡量标准 <add name="AgentResources" connectionString="me

我正在使用实体框架上传一个大型电子表格(14k行),并对我的数据库进行更新。如果我一行一行地设置代码,那么每次更新都会按预期进行。然而,一旦我跳出代码,我就开始看到抛出了这个异常:
基础提供程序在打开时失败了

这让我很反感,因为我们在整个站点中都使用实体框架,它工作得很好,所以我知道我们的连接字符串不是问题所在。事实上,当电子表格变小时,这个页面甚至可以很好地处理上传。然而,这是一个很好的衡量标准

<add name="AgentResources" connectionString="metadata=res://*/Models.AgentResources.csdl|res://*/Models.AgentResources.ssdl|res://*/Models.AgentResources.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=QUAHILSQ03\sql08A;initial catalog=AgentResourcesU01;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
编辑


使用上述静态方法的循环本身位于
使用(var scope=new TransactionScope())
语句的内部,以便对数据库进行所有更改。不确定这是否会导致问题

我推断
db
在类级别被声明为静态的

您可能会遇到某种并发错误。静态方法,尤其是静态类级变量,在同时发生多件事情时,容易引起问题

如果您必须将
区域性地
作为一个静态方法,我建议您重新编写它,以便在该方法中声明
db
,并将其作为参数传递给使用它的方法

public static string TerritoryOnly(ZipCodeTerritory zipCode, string territory)
{
    msg = string.Empty;
    using (var db = new AgentResources())
    {
        zipCode.IndDistrnId = territory;
        Save(db, zipCode);                
    }
    return msg;
}

我还建议设置VS,以便在每次抛出异常时都中断。这将导致应用程序冻结在初始低级异常状态,最终导致您的“基础提供程序在打开时失败。”错误。这可能会告诉你很多确切的原因

我只是试着做了这些改变,我对电子表格的了解有点深入,但只是偶尔(它似乎打破了240点左右的记录)。我忘了提到所有这些工作都是在` using(var scope=new TransactionScope())语句中完成的。这可能是问题的原因吗?嗯。我似乎记得,当您在
TransactionScope
实例中打开多个连接时,它会尝试将事务升级到
MSDTC
。这是已知的导致此错误的原因。仅出于诊断目的,您可以在不使用
TransactionScope
的情况下尝试,看看会发生什么。。。。但是,由于您在每一行上执行单独的打开和保存操作,因此将打开和关闭连接14000次。这可能只是因为您耗尽了连接池,而且在任何情况下,它都不会进行得很快。您能否对代码进行重新工具化,以便所有14000次更新都使用相同的
AgentResources
实例?(对于首选项,不要将其设置为静态,而是使用构造函数注入。)最后:您可能已经了解了这一点,但只是以防万一:出现此错误消息的原因(和解决方案)很多:谢谢您的帮助。我在没有TransactionScope的情况下尝试了循环,但我不再得到错误,因此问题/可能的解决方案就在该区域的某个地方。。。
public static string TerritoryOnly(ZipCodeTerritory zipCode, string territory)
{
    msg = string.Empty;
    using (var db = new AgentResources())
    {
        zipCode.IndDistrnId = territory;
        Save(db, zipCode);                
    }
    return msg;
}