Asp.net中Web.config連線字串及配置資料庫sqlserver,詳細
近日正在看Asp.net,看到Web.config有很不清楚之處,特意從網路、MSDN蒐集、歸納和整理,供大家分享。
在ASP.NET的web.config中,可以用兩種方式來寫連線字串的配置。
<configuration> <appSettings> <add key="connstr1" value="Data Source=.;Initial Catalog=DBName;Integrated Security=true"/> <add key="connstr2" value="........."> </appSettings> <connectionStrings> <add name="connstr3" connectionString="........" /> <add name="connstr4" connectionString="......" providerName="System.Data.Sqlclient" </connectionStrings> </configuration>
如上程式碼所示:兩種方式為appSettings和connectionStrings
appSettings:
①它是asp.net1.1的時候用的,在vs2003中用的
②裡面存的相當於鍵值對的形式,key和value。不僅僅可以存連線字串,還可以儲存一些配置項。其中value中包括資料庫伺服器地址、使用者名稱和密碼、資料庫名稱等資訊。
③在appSettings中,不能使用ProviderName="System.Data......."(不過如果你要用也可以,只要寫在value裡面就可以了,當成值傳遞過去)
④在後臺取值方式用程式碼:
string conn=System.Configuration.ConfigurationManager.AppSettings["connstr";]
connectionStrings:
①它是asp.net2.0中新增的。
②裡面存的也類似於鍵值對的形式,使用的是name和connectionString,一般就存連線字串。
③在connectionStrings中可以,可以使用providerName.
④在後臺程式碼,取值的方式:
string conn=System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
其它說明:
①Initial Catalog=Database就是資料庫名稱,根據從網路上搜集到的資訊看,兩者好像可以完全通用,基本沒有區別。
② Integrated Security整合安全選項設定,可識別的值為 true、false、yes、no以及與true等效的sspi。當為 false 時,將在連線中指定使用者ID和密碼。當為true時,將使用當前的Windows 帳戶憑據進行身份驗證。其中SSPI為Security Supoort Provider Interface即安全支援提供者介面,Microsoft安全支援提供器介面(SSPI)是定義得較全面的公用API,用來獲得驗證、資訊完整性、資訊隱私等整合安全服務,以及用於所有分散式應用程式協議的安全方面的服務。應用程式協議設計者能夠利用該介面獲得不同的安全性服務而不必修改協議本身。SQL Server 資料庫連線字串中,Integrated Security=SSPI 表示使用 Windows 身份驗證,即使用運行當前應用程式的使用者來連線 SQL Server,對網頁來說,一般是 IIS 中的匿名使用者。
既然connectionStrings是2.0版本出來的,那它肯定比appsettings有好處了:
網上如是說:
① 可將連線字串加密,使用MS的一個加密工具即可。
② 可直接邦定的資料來源控制元件,而不必寫程式碼讀出來再賦值給控制元件。
③ 可方便的更換資料庫平臺,如換為Oracle資料庫,只需修改providerName
providerName它的作用是什麼呢?
我們先看一下providerName的引數值。
①providerName="System.Data.SqlClient" ----說明使用的是MSSQLServer資料庫
②providerName="System.Data.SqlLite" ----說明使用的是SQLLite資料庫
③providerName="System.Data.OracleClient" ----說明使用的是Oracle資料庫
或providerName="System.Data.Oracle.DataAccess.Client" ----同上
④providerName="System.Data.OleDb" ----說明使用的是Access資料庫
providerName可寫可不寫。
我們什麼時候用providerName呢?
比如,我們現在要做一個專案,以後會賣個兩個企業使用:A和B。這就有不確定因素了,A使用Oracle,B使用SQLserver。
所以,
①資料庫:我們需要建兩個庫,一個用oracle,一個用Sqlserver。
②程式:我們一般不去寫兩個系統讓他們使用,我們肯定會去判斷,先判斷他們使用的是什麼資料庫,然後再在程式裡執行什麼樣的資料庫指令碼。
③web.config程式碼:
<configuration> <connectionStrings> <add name="connStr" connectionString="Data Source=.;Initial Catalog=mydb;Integrated Security=true" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration>④程式程式碼:進行判斷,如果providerName="System.Data.SqlClient"則執行SQLServer的指令碼,如果providerName="System.Data.OracleClient"則呼叫Oracle的資料庫指令碼。
public static readonly string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ProviderName; public static string databaseType = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ProviderName; public static int ExecuteNonQuery(CommandType commandType, string commandText, params System.Data.OleDb.OleDbParameter[] parm) { int num = 0; if (databaseType == "System.Data.SqlClient") { //此處執行Microsoft SQLServer的資料庫指令碼 } else if (databaseType == "System.Data.OracleClient") { //此處執行Oracle的資料庫指令碼 } return num; }
常見的資料庫連線程式碼(C#):
SqlConnection conn = new SqlConnection( “Server=(local);Integrated Security=SSPI;database=Pubs“);
SqlConnection conn = new SqlConnection(“server=(local)\NetSDK;database=pubs;Integrated Security=SSPI“);
SqlConnection conn = new SqlConnection(“Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;“);
SqlConnection conn = new SqlConnection(“ data source=(local);initial catalog=xr;integrated security=SSPI;
persist security info=False;workstation id=XURUI;packet size=4096; “);
SqlConnection myConn = new System.Data.SqlClient.SqlConnection(“Persist Security Info=False;Integrated
Security=SSPI;database=northwind;server=mySQLServer“);
SqlConnection conn = new SqlConnection( “ uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900“);