2013-07-16 81 views
-1

有一個asp.net項目(4.0),並試圖找出訪問連接字符串的最佳方式。ASP.NET的連接字符串訪問

我在web.config文件中有兩個連接字符串,一個用於prod和其他測試。有很多aspx頁面,我想通過一個函數或某種全局變量來集中調用連接 - 這樣,當我需要將連接字符串更改爲指向測試或生產時,我只能將其更改爲onle的地方。

任何想法的最佳做法。

謝謝。

回答

4

我在web.config文件中有2個連接字符串,其中一個用於prod,另一個用於測試。

這是不正確的做法。你要做的是讓配置文件保持靜態,並改變環境之間的代碼,這與你應該做的事情相反。

在這種情況下,您應該在配置文件中有一個連接字符串,以及兩個配置文件(每個環境一個)或Web.config轉換,具體取決於您正在使用的工具。這個想法是,每個環境將具有相同代碼的不同配置,而不是具有相同配置的不同代碼。

所以在您的配置文件,你可能有這樣的事情:

<connectionStrings> 
    <add name="myConnectionString" connectionString="Data Source=servername;Initial Catalog=databasename;Integrated Security=True" /> 
</connectionStrings> 

(或任何實際的連接字符串。)

然後在你的代碼,你會用這樣的訪問:

ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString 

每個目標環境將(可能)有它自己的配置文件自身的連接字符串,但代碼不應該有環境之間切換。

由於您正在尋找封裝字符串,因此您無需在整個地方都使用整個ConfigurationManager調用,您當然可以做到這一點。你如何去做取決於你。一種方法可能是在某個對象上有一個靜態字段。事情是這樣的:

public class DatabaseHelper 
{ 
    public static string ConnectionString 
    { 
     get 
     { 
      return ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
     } 
    } 
} 

然後在其他地方使用的連接字符串在代碼中,你可以這樣做:

DatabaseHelper.ConnectionString 

這是肯定會更短。它並不真正改變連接字符串的訪問方式,它只是將其封裝在自定義對象的後面,以減少在各行上使用的代碼量。

+0

+1我建議爲VS下載SlowCheetah插件用於此目的:http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 – Icarus

+0

是的。每個配置文件(每個環境)需要什麼......以及一個配置文件中的一堆東西。 – granadaCoder

+0

請不要寫「voo doo」代碼.......你可以在appSetting上更改,並且環境會改變。保持你的.config文件乾淨,明智等,等等和「標準」。繼承你的代碼的人會感謝你而不是詛咒你。 – granadaCoder

0

DAL(數據訪問層)將爲您封裝。有很多選擇:Typed Datasets和TableAdapter是最古老的實體框架之一,NHibernate,Telerik OpenAccess ...基本上,檢索連接字符串不是你不應該爲自己編寫代碼的。

另外,正如@大衛所說的,最佳做法是爲每個配置分別維護一個web.config,而不是一個包含兩者。在我們的應用程序中,我們在web.config中有「其他」連接字符串,但它們被註釋掉了。

0

我贊成David的迴應。但會將此添加到對話中。

你可以在web.config的app.config文件中加入「指針」到外部文件。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings configSource="ExternalConnectionStrings.config" /> 
</configuration> 

ExternalConnectionStrings.config

<connectionStrings> 
    <add name="MainConnectionString" 
     connectionString="blah blah blah " 
    providerName="yada.yada.yada" /> 

</connectionStrings> 

的內容基於環境中,可以有多個 ExternalConnectionStrings.config文件......。

ExternalConnectionStrings.Development.config 
ExternalConnectionStrings.QA.config 
ExternalConnectionStrings.Staging.config 
ExternalConnectionStrings.Production.config 

的「折衷」是,你必須手動複製此文件(如用後生成事件)......但它是「乾淨」。

然後你只需要在原始的app.config(或web.config中)來改變一個值

<configuration> 
    <connectionStrings configSource="ExternalConnectionStrings.Production.config" /> 
</configuration> 

我不是說我這樣做,還是建議。但我寧願你這樣做....然後破解原始的app.config文件。

保持你的配置文件精益求精................當你想弄清楚哪個連接字符串正在被使用...你不想必須思考或解析一些巫術代碼來弄清楚。