1. 程式人生 > >詳解Asp.Net Sql資料庫連線字串

詳解Asp.Net Sql資料庫連線字串

 1.連線資料庫檔案

<add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True; AttachDBFilename=|DataDirectory|TimeTracker.mdf;User Instance=true"/>

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

   一、Data Source
SqlConnectionStringBuilder的DataSource屬性,對應connectionString中的Data Source,“Data Source”可以由下列字串代替:“server”,“address”,“addr”和“network address”。
Data Source=.\SQLExpress也可以寫成這樣Data Source=(local)\SQLExpress。

   二、Integrated Security
SqlConnectionStringBuilder的IntegratedSecurity屬性,對應connectionString中的Integrated Security,“Integrated Security”可以寫成“trusted_connection”,為true時,使用當前的 Windows 帳戶憑據進行身份驗證,為false時,需要在連線中指定使用者 ID 和密碼。

   三、AttachDBFilename
SqlConnectionStringBuilder的AttachDBFilename屬性,對應connectionString中的AttachDBFilename,“AttachDBFilename”可以寫成“extended properties”,“initial file name”。AttachDbFileName屬性指定連線開啟的時候動態附加到伺服器上的資料庫檔案的位置。這個屬性可以接受資料庫的完整路徑和相對路徑(例如使用|DataDirectory|語法),在執行時這個路徑會被應用程式的App_Data目錄所代替。
有一篇文章,專門解釋DataDirectory是什麼。

   四、User Instance
SqlConnectionStringBuilder的UserInstance屬性,對應connectionString中的User Instance ,該值指示是否將連線從預設的 SQL Server Express 例項重定向到在呼叫方帳戶之下執行並且在執行時啟動的例項。UserInstance=true,在這種情況下,SQLServerExpress為了把資料庫附加到新的例項,建立一個新的程序,在開啟連線的使用者身份下執行。在ASP.NET應用程式中,這個使用者是本地的ASPNET帳號或預設的NetworkService,這依賴於作業系統。為了安全地附加非系統管理員帳號(例如ASP.NET帳號)提供的資料庫檔案,建立一個獨立的SQLServer使用者例項是必要的。


附錄:

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資料庫檔案的連線字串:

sqlserver 2008 的連線字串和sql2005的幾乎是一樣的,但是,他們對於其中的一些配置要求不同。我試著用了很多連線字串,最後找到了問題的原因,特別記錄到這裡,如果有相同問題的同學,可以參考。

準備工作:必須確保SQL Server(SQLEXPRESS)服務已經啟動。

正文:

// windows驗證方式
string connectionStringTest1 = @"Data Source=BL48VQ68YDRNQMN\SQLEXPRESS;Initial Catalog=PrimarySchool;Integrated Security=SSPI; ";

//建立信任連線(具體含義與同其他方式的區別還需學習)
string connectionStringTest2 = @"server=BL48VQ68YDRNQMN\SQLEXPRESS;Initial Catalog=PrimarySchool;Integrated Security=True";

//網站連線資料庫的標準方式
string connectionStringTest3 = @"server=BL48VQ68YDRNQMN\SQLEXPRESS;database=PrimarySchool;user id=admin;password=123456";

//應用程式連線資料庫的標準方式
string connectionStringTest4 = @"Data Source = BL48VQ68YDRNQMN\SQLEXPRESS; Initial Catalog = tempdb; User Id = admin; Password = 123456;";

連線、斷開、釋放資源的語句如下

SqlConnection conn = new SqlConnection(connectionStringTest5);
try
{
conn.Open();
}
catch (Exception e)
{
string message = e.Message;
}
finally
{
conn.Close();
conn.Dispose();
}

注意事項:與sqlserver2005不同,連線字串當中的資料來源(server、Data Source)必須是機器名,如果寫的是IP地址如:127.0.0.1,那麼會拋異常的。

#資料庫連線字串集合
(一)常用連線:
1.使用SqlConnection物件:

a. Sql 驗證
public void SqlConnectionOpen()
{
SqlConnection conn= new SqlConnection();
conn.ConnectionString = "user id=sa;password=;initial catalog=northwind;datasource=localhost;connect Timeout=20";
conn.Open();
}

 b. Windows 身份驗證

public void SqlConnectionOpen()
{
SqlConnection conn= new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;initial catalog=northwind;datasource=localhost;connect Timeout=20";
conn.Open();
}


2.使用OleDbConnection物件:
public void OleDBConnectionOpen()
{
OleDBConnection conn = new OleDbconnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Customer.mdb";
conn.Open();
}
(二)其它:
1.ODBC連線Access本地資料庫
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=C:\a.mdb;"+
"Uid=Admin;"+"Pwd=;");
2.ODBC連線Access系統資料庫
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=C:\a.mdb;"+
"SystemDB=Admin;"+"Pwd=;");
3.ODBC連線Access系統資料庫
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=\\server\share\a.mdb;");
4.ODBC連線Excel系統資料庫
conGoodDay.Open("Driver={Microsoft Access Driver(*.xls)};"+"DriverId=790;"+
"Dbq=C:\a.xls;"+"DefaultDir=c:\somepath;");
5.ODBC連線Oracle系統資料庫
conGoodDay.Open("Driver={Microsoft ODBC for oracle};"+"Server=OracleServer.world;"+
"Uid=Admin;"+"Pwd=password;");
6.ODBC連線Sql Servr
conGoodDay.Open("Driver={Sql Server};"+"Server=myServer;"+"Database=myDatabaseName;"
"Uid=Admin;"+"Pwd=password;");
7.ODBC連線Visual FoxPro
conGoodDay.Open("Driver={Microsoft Visual FoxPro Driver};"+
"SourceType=DBC;"+"SourceDB=c:a.dbc;"+"Exclusive=No;");

Windows 身份驗證

建議使用 Windows 身份驗證(有時也稱為“整合安全性”)連線到支援其的資料來源。連線字串中使用的語法根據提供程式的不同而不同。下表演示用於 .NET Framework 資料提供程式的 Windows 身份驗證語法。

提供程式
 語法
 
SqlClient
 Integrated Security=true;

-- or --

Integrated Security=SSPI;
 
OleDb
 Integrated Security=SSPI;
 
Odbc
 Trusted_Connection=yes;
 
OracleClient
 Integrated Security=yes; 
 

Integrated Security=true 用於OleDb提供程式時會引發異常。