作爲標題表明我有一個持久的數據庫連接有點問題。在這裏,我們有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();
}
}
您的基本web.config連接字符串在元素內嗎?元素是的直接後代嗎?元素和路徑必須完全匹配主配置和配置轉換文件 –
Tommy
2013-04-23 19:53:24
@Tommy,是的。 web.config轉換工作完美無瑕,這是我對這個問題無知的另一個原因。當轉換後檢查我的產品web.config時,它沒有任何對我的開發數據庫的引用,否則我的客戶端將無法使用該應用程序,因爲連接會指向錯誤的數據庫。我的猜測是,VS正在生成一些引用開發數據庫的底層代碼。 – AdrianoRR 2013-04-24 17:23:07