2013-04-23 124 views
-1

作为标题表明我有一个持久的数据库连接有点问题。在这里,我们有2个数据库,一个用于开发和测试,另一个用于官方,生产。我们曾经在测试和部署时手动更改不同的连接字符串,有时会发生奇怪的错误。当我们突然停止开发数据库时,整个生产应用程序停止工作,说SQL连接丢失了。但web.config指向生产而不是测试环境!开发人员数据库连接持续在生产环境

经过一番研究,我们发现了web.config转换,并认为这将解决我们的问题。它没有。即使我们的web.config没有引用它,这个问题仍然存在,就好像我们的应用程序对开发环境紧张一样。为了使事情更清楚,我会发布连接字符串,转换和发生的最新SQL错误(当我们将开发数据库限制为单用户进行一些更新时),以及我们将它连接到我们的方式DBML(L2SQL)。

连接字符串

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> 

    <!--ConnectionString Central--> 
    <add name="OperationsBD" connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=OPERATION;Persist Security Info=True;User ID=lab;Password=devPassword" providerName="System.Data.SqlClient"/> 
    <add name="AnalisysBD" connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=lab;Password=devPassword" providerName="System.Data.SqlClient"/> 

<!--Production ConnectionString--> 
    <!--<add name="OperationsDB" connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=OPERATION;Persist Security Info=True;User ID=company;Password=prodPassword" providerName="System.Data.SqlClient"/> 
    <add name="AnalisysDB" connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=company;Password=prodPassword" providerName="System.Data.SqlClient"/>--> 

WEB.CONFIG转化(制备)

<connectionStrings> 
     <add name="OperationsDB" 
     connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=OPERATION;Persist Security Info=True;User ID=company;Password=prodPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 

     <add name="AnalisysDB" 
     connectionString="Data Source=PRODSERVER\COMPANY;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=company;Password=prodPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

WEB.CONFIG变换(DEV)

<connectionStrings> 
     <add name="OperationsDB" 
     connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=OPERATION;Persist Security Info=True;User ID=lab;Password=devPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 

     <add name="AnalisysDB" 
     connectionString="Data Source=DEVSERVER\DEV;Initial Catalog=ANALISYS;Persist Security Info=True;User ID=lab;Password=devPassword" 
      providerName="System.Data.SqlClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

SQL ERROR(上dev的单用户限制环境)

Cannot open database "operation" requested by the login. The login failed. Login failed for user 'lab'. 

最后,我们的方式把它连接到LINQ到SQL的DBML

public partial class OperationDataContext 
    { 
     private const string OPERATION_CONN_STRING = "OperationsDB"; 
     public OperationDataContext() 
      : base(System.Configuration.ConfigurationManager.ConnectionStrings[OPERATION_CONN_STRING].ConnectionString, mappingSource) 
     { 
      OnCreated(); 
     } 
    } 

    public partial class AnalisysDataContext 
    { 
     private const string ANALISYS_CONN_STRING = "AnalisysDB"; 
     public AnalisysDataContext() 
      : base(System.Configuration.ConfigurationManager.ConnectionStrings[ANALISYS_CONN_STRING].ConnectionString, mappingSource) 
     { 
      OnCreated(); 
     } 
    } 
+0

您的基本web.config连接字符串在元素内吗?元素是的直接后代吗?元素和路径必须完全匹配主配置和配置转换文件 – Tommy 2013-04-23 19:53:24

+0

@Tommy,是的。 web.config转换工作完美无瑕,这是我对这个问题无知的另一个原因。当转换后检查我的产品web.config时,它没有任何对我的开发数据库的引用,否则我的客户端将无法使用该应用程序,因为连接会指向错误的数据库。我的猜测是,VS正在生成一些引用开发数据库的底层代码。 – AdrianoRR 2013-04-24 17:23:07

回答

0

这可能只是一个错字,但我也注意到,在开发“名称”为“OperationsBD”和“ AnaylsisBD“,但转换设置为匹配”OperationsDB“和”AnaylsisDB“的名称。如果这不是拼写错误,它将永远不匹配,因此从不替换连接字符串。

+0

我更改了数据库名称,并在执行时犯了一个错误。当我再次阅读我的问题并修复它时看到了它。但请放心,转换工作正常,问题仍然存在。 – AdrianoRR 2013-04-23 19:16:06

+0

啊,那么我的回答是没有意义的。 – brenton 2013-04-23 19:21:15