如何使用Connection對象串連資料庫?
對於不同的.NET資料提供者,ADO.NET採用不同的Connection對象串連資料庫。這些Connection對象為我們屏蔽了具體的實現細節,並提供了一種統一的實現方法。
Connection類有四種:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。
SqlConnection類的對象串連SQL Server資料庫;OracleConnection 類的對象串連Oracle資料庫;OleDbConnection類的對象串連支援OLE DB的資料庫,如Access;而OdbcConnection類的對象串連任何支援ODBC的資料庫。與資料庫的所有通訊最終都是通過Connection對象來完成的。
SqlConnection類
Connection 用於與資料庫“對話”,並由特定提供者的類(如 SqlConnection)表示。儘管SqlConnection類是針對Sql Server的,但是這個類的許多屬性、方法與事件和OleDbConnection及OdbcConnection等類相似。
注意:使用不同的Connection對象需要匯入不同的命名空間。OleDbConnection的命名空間為System.Data.OleDb。SqlConnection的命名空間為System.Data.SqlClient。OdbcConnection的命名空間為System.Data.Odbc。OracleConnection的命名空間為System.Data.OracleClinet。
我們就可以使用如下兩種方式串連資料庫,即採用整合的Windows驗證和使用Sql Server身分識別驗證進行資料庫的登入。
1、整合的Windows身分識別驗證文法範例
string constr = "server=.;database=myschool;integrated security=SSPI";
說明:程式碼中,設定了一個針對Sql Server資料庫的連接字串。其中server表示運行Sql Server的電腦名稱,由於程式和資料庫系統是位於同一台電腦的,所以我們可以用.(或localhost)取代當前的電腦名稱。database表示所使用的資料庫名(myschool)。由於我們希望採用整合的Windows驗證方式,所以設定 integrated security為SSPI即可。
2、Sql Server 2005中的Windows身分識別驗證模式如下:
string constr = "server=.;database=myschool;uid=sa;pwd=sa";
說明:程式碼中,採用了使用已知的使用者名稱和密碼驗證進行資料庫的登入。資料庫連接字串是不區分大小寫。uid為指定的資料庫使用者名稱,pwd為指定的使用者口令。為了安全起見,一般不要在代碼中包括使用者名稱和口令,你可以採用前面的整合的Windows驗證方式或者對Web.Config檔案中的連接字串加密的方式提高程式的安全性。
3、Sql Server 2005中的Sql Server身分識別驗證模式如下:
string constr = "data source=.;initial catalog=myschool;user id=sa;pwd=sa";
說明:程式碼中data source 表示運行資料庫對應的電腦名稱,initial catalog表示所使用的資料庫名。uid為指定的資料庫使用者名稱,pwd為指定的使用者口令。
4、Access資料庫的連接字串的形式如下:
string connectionString =@"provider=Microsoft.Jet.OLEDB.4.0;data source=c:\DataSource\myschool.mdb";
說明:程式碼中,通過專門針對Access資料庫的OLE DB提供者,實現資料庫的串連。這使用的的OLE DB提供者為Microsoft.Jet.OLEDB.4.0,並且資料庫存放在c:\DataSource目錄下,其資料庫檔案為myschool.mdb。
string constr = "server=.;database=myschool;integrated security=SSPI"; //string constr = "server=.;database=myschool;uid=sa;pwd=sa"; //string constr = "data source=.;initial catalog=myschool;user id=sa;pwd=sa"; SqlConnection con = new SqlConnection(constr); // con.ConnectionString = constr; string sql = "select count(*) from grade"; SqlCommand com = new SqlCommand(sql,con); try { con.Open(); MessageBox.Show("成功串連資料庫"); int x = (int)com.ExecuteScalar(); MessageBox.Show(string.Format("成功讀取{0},條記錄", x)); } catch (Exception) { throw; } finally { con.Close(); MessageBox.Show("成功關閉資料庫連接", "提示資訊", MessageBoxButtons.YesNoCancel); }
5、Web.config 配置
在ASP.NET 2.0中,使用了一種在運行時解析為連接字串值的新的聲明性運算式文法,按名稱引用資料庫連接字串。連接字串本身儲存在 Web.config 檔案中的 <connectionStrings>配置節下面,以便易於在單個位置為應用程式中的所有頁進行維護。
<?xml version="1.0"?><configuration><connectionStrings><add name="myschool" connectionString="Server=localhost;Integrated Security=True;Database=myschool;Persist Security Info=True" providerName="System.Data.SqlClient" /></connectionStrings><system.web><pages styleSheetTheme="Default"/></system.web></configuration>
我們也可以用下面的方式從設定檔直接讀取資料庫連接字串。首先我們需要引用using System.Web.Configuration命名空間,該命名空間包含用於設定 ASP.NET 配置的類。string connectionString =ConfigurationManager.ConnectionStrings["myschool"].ConnectionString;
首先你應該區分Windows驗證與Sql自身的驗證的區別。
Windows驗證就是SqlServer伺服器使用Windows內建的驗證系統,如果你指定SqlServer內Windows的一個組有訪問的許可權,那麼加入此組的Windows使用者都有訪問資料庫的許可權。此驗證有個缺點,就是如果不是在域模式下,無法加入遠端電腦的使用者,所以如果使用C/S方式寫程式的話,使用Windows驗證無法使本機電腦的Windows帳戶訪問遠端資料庫伺服器。
Sql驗證就簡單多了,就是使用sqlserver的企業管理器中自己定義由Sql控制的使用者,指定使用者權限等。這個帳戶資訊是由SqlServer自己維護的,所以SqlServer更換電腦後資訊不會丟失,不用重新設定。
所以如果你的項目使用在一個比較大的網路中,而且對安全要求比較高,那麼應該建立域,使用Windows驗證,而且要與系統管理員配合詳細設定可以訪問SqlServer的Windows帳戶。如果使用一個小網路,而且此網路僅用來使用項目,對安全沒有高要求,那麼使用SqlServer驗證,而且更新,升級等都方便。
Windows驗證與SqlServer驗證的資料庫聯結字串是不同的。