1. 程式人生 > >Web.Config中資料庫連線字串解析

Web.Config中資料庫連線字串解析

在ASP.NET中,通過Web.config,你可為使用 <appSettings> 標記,在這個標記中,你可用 <add ... /> 標記定義0到多個設定。本文中我們

主要討論瞭如何使用web.config來配置一個web應用程式中的資料庫連線。

一.基本使用
web.config檔案是標準的xml檔案,我們可以使用它來為一臺機器下的每一個web應用程式或某個應用程式或一個目錄下的asp.net頁面來進行設定,當然,它也可以為一個單獨的web頁面進行設定。
SqlServer連線配置:
<add name="LocalSqlServer" connectionString="Data Source=./SQLExpress;min pool size=5;max pool size=512;Integrated

Security=True;AttachDBFilename=|DataDirectory|TimeTracker.mdf;User Instance=true" />

<add name="MDM" connectionString="Data Source=10.21.17.17,22/ND0;Initial Catalog=MDM_V2;Persist Security Info=True;User

ID=sa;Password=Lenovo!123" providerName="System.Data.SqlClient";min pool size=5;max pool size=512;/>

SqlConnectionStringBuilder例項化時,要用到connectionString,
如:SqlConnectionStringBuild builder = new SqlConnectionStringBuild(connectionString)。

引數說明:

1.Data Source
SqlConnectionStringBuilder的DataSource屬性,對應connectionString中的Data Source,“Data Source”可以由下列字串代替:

“server”,“address”,“addr”和“network address”。Data Source=./SQLExpress也可以寫成這樣Data Source=(local)/SQLExpress。

2.Integrated Security
SqlConnectionStringBuilder的IntegratedSecurity屬性,對應connectionString中的Integrated Security,“Integrated Security”可以

寫成“trusted_connection”,為true時,使用當前的 Windows 帳戶憑據進行身份驗證,為false時,需要在連線中指定使用者 ID 和密碼。

3.AttachDBFilename
SqlConnectionStringBuilder的AttachDBFilename屬性,對應connectionString中的AttachDBFilename,“AttachDBFilename”可以寫成“extended properties”,“initial file name”。AttachDbFileName屬性指定連線開啟的時候動態附加到伺服器上的資料庫檔案的位置。

這個屬性可以接受資料庫的完整路徑和相對路徑(例如使用|DataDirectory|語法),在執行時這個路徑會被應用程式的App_Data目錄所代替。

4.User Instance
SqlConnectionStringBuilder的UserInstance屬性,對應connectionString中的User Instance ,該值指示是否將連線從預設的 SQL Server Express 例項重定向到在呼叫方帳戶之下執行並且在執行時啟動的例項。UserInstance=true,在這種情況下,SQLServerExpress為了把資料庫

附加到新的例項,建立一個新的程序,在開啟連線的使用者身份下執行。在ASP.NET應用程式中,這個使用者是本地的ASPNET帳號或預設的

NetworkService,這依賴於作業系統。為了安全地附加非系統管理員帳號(例如ASP.NET帳號)提供的資料庫檔案,建立一個獨立的SQLServer使用者例項是必要的。

5.min pool size=5;max pool size=512;
資料庫連線池最小連線數min pool size,資料庫連線池最大連線數max pool size.

6.DataDirectory是什麼?

asp.net  2.0有一個特殊目錄app_data,通常Sql  server  2005  express資料檔案就放在這個目錄,相應的資料庫連線串就是:
connectionString="……  data  source=./SQLEXPRESS;Integrated  Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User 

Instance=true"這裡有一個DataDirectory的巨集,它表示什麼意義呢?

DataDirectory是表示資料庫路徑的替換字串。由於無需對完整路徑進行硬編碼,DataDirectory  簡化了專案的共享和應用程式的部署。例如,無需使用以下連線字串: 
"Data  Source=  c:/program  files/MyApp/app_data/Mydb.mdf" 
通過使用|DataDirectory|(包含在如下所示的豎線中),即可具有以下連線字串: 
"Data  Source  =  |DataDirectory|/Mydb.mdf" 。

不僅僅是Sql server 2005 express中使用,也可以在其它的檔案資料庫中使用,例如Sqllite資料庫檔案的連線字串:

<add  name="DefaultDB" 
connectionString="DriverClass=NHibernate.Driver.SQLite20Driver;Dialect=NHibernate.Dialect.SQLiteDialect;Data 

Source=|DataDirectory|/data.db3" />

7.connect timeout= 9000
與其他 .NET Framework 資料提供程式(SQL Server、OLE DB 和 ODBC)中的 Connection 物件不同,OracleConnection 不支援

ConnectionTimeout 屬性。使用屬性或在連線字串中設定連線超時沒有效果,而且返回的值總是零。OracleConnection 也不支援 Database

屬性或 ChangeDatabase 方法。


二.配置繼承
如:網站的主目錄是/inetpub/wwwroot/,那麼我們將web.config放置於其下,那麼這個網站中的應用程式將被web.config中的設定所影響。

三.使用配置
在程式中,你可以使用以下程式碼來使用web.config中的設定:
-----vb.net-----
imports system.configuration
dim myvar as string 
myvar=configurationsettings.appsettings("connstring")
-----c#-----
using system.configuration;
string myvar;
myvar=configurationsettings.appsettings["connstring"];

四.設定不同子目錄下應用程式的資料庫連結
這是一個很有意思的方法,在設定前,先說明一下它的用途:
如果在一個虛擬目錄下有多個子目錄,每一個子目錄下下的web應用程式都需要連線不同的資料庫,這如何做呢?

1.是在每一個子目錄下分別建立一個web.config,用它來設定這個目錄下的資料庫連線。但這種方法的問題是需要維護每一個了目錄下的web.config。

2.是隻在虛擬目錄下建立一個web.config,在它裡面設定每一個子目錄下的應用程式的資料庫連線。說到這裡,你會想到上面的第二種方法,使用多個不同的key值來設定,這的確是一個辦法。

這裡,我想說明的是另一種方法:在虛擬目錄下佈置web.config,在其中使用location標記,使用同一個key值來連線資料庫,這樣做的好處很明顯,因為用同一個key值,將導致在所有目錄下的應用程式中,都可以使用共同的語句來連線資料庫,這在程式以後發生位置遷移時,並不用修改程式中連線資料庫的語句。
具體設定如下:

<location path="news">
<appsettings>
<add key="connstring" value="uid=flyangel;password=3.1415926;database=news;server=(local)"  />
</appsettings>
</location>
<location path="bbs">
<appsettings>
 <add key="connstring" value="uid=flyangel;password=3.1415926;database=bbs;server=(local)" />
</appsettings>
</location>
注:上例中news、bbs分別是虛擬目錄下的子目錄。


為了有效地利用.config檔案,你應當建立標準的鍵名和值定義供所有的應用程式開發人員所用。這樣就可以讓同一專案的開發人員採用公共的專案設定。這些標準在部署應用程式和將其轉化為產品的時候非常有用。