kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
          http://blog.csdn.net/jabby12/archive/2004/08/03/59602.aspx
            在ADO.NET對(duì)象模型中,Connection對(duì)象代表了與數(shù)據(jù)源之間的連接。.NET框架中有兩個(gè)Connection對(duì)象:一個(gè)是OleDbConnection,用于大多數(shù)的數(shù)據(jù)庫(kù)連接,一個(gè)是SqlConnection,是MS開發(fā)的專門用于針對(duì)SQL Server的連接。在創(chuàng)建Connection對(duì)象之前,你必須先引用System.Data.OleDb或者System.Data.SqlClient和System.Data三個(gè)名空間。

          1.SQL Server數(shù)據(jù)庫(kù)的連接   

             你可以使用Connection對(duì)象的屬性來指定數(shù)據(jù)源的位置及其它參數(shù)來連接數(shù)據(jù)庫(kù)。如:SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;use id=yourid,password=yourpassword;");

          這是連接到本地?cái)?shù)據(jù)庫(kù),如果你想連到網(wǎng)絡(luò)上的的數(shù)據(jù)庫(kù),就要利用集成安全性,同時(shí)忽略用戶名和密碼。如:

          SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          如果使用的是ODBC連接到SQL Server,可以通過使用Trusted_Connection=y(tǒng)es;來使用網(wǎng)絡(luò)數(shù)據(jù)庫(kù)。

          2.Oracle數(shù)據(jù)庫(kù)的連接:(前提:必須先安裝Oracle客戶端實(shí)用工具的適當(dāng)版本,并創(chuàng)建數(shù)據(jù)庫(kù)別名,接著就可以用以下的連接字符串進(jìn)行連接)

          SqConnection con=new SqlConnection("Provider=MSDAORA;Data Source=dbAlias;User id=yourid,password=youpwd;);

          3.Access數(shù)據(jù)庫(kù)的連接:(你可以使用以下連接字符串來連接)

          SqConnection con=new SqlConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\yourdb.mdb;User id=yourid,password=youpwd;);

          連接到數(shù)據(jù)庫(kù)之后即可調(diào)用Connection對(duì)象的Open()方法來打開與數(shù)據(jù)庫(kù)的連接,同理Close()方法用來關(guān)閉與數(shù)據(jù)庫(kù)的連接。

          連接池:

                連接池是什么?在一個(gè)三層結(jié)構(gòu)(或N層)中,當(dāng)一個(gè)客戶端與中間層服務(wù)器進(jìn)行通訊的時(shí)候,服務(wù)器會(huì)創(chuàng)建一個(gè)與數(shù)據(jù)庫(kù)連接,并執(zhí)行操作的業(yè)務(wù)對(duì)象(也就是與數(shù)據(jù)庫(kù)連接的實(shí)例),同時(shí)會(huì)創(chuàng)建一個(gè)Connection對(duì)象,在放在一個(gè)池中(實(shí)際上是一個(gè)線程)。當(dāng)釋放這個(gè)實(shí)例的時(shí)候,此實(shí)例便關(guān)閉,此時(shí)并沒有真正的關(guān)閉數(shù)據(jù)連接,而是將Connection對(duì)象標(biāo)記為關(guān)閉后存儲(chǔ)在池中。如果這時(shí)再來啟動(dòng)一個(gè)新的業(yè)務(wù)對(duì)象,這時(shí)就會(huì)檢查現(xiàn)有的連接,如果池中有打開的連接,即使用它,否則再創(chuàng)建一個(gè)新連接。

          可能你會(huì)覺得很奇怪,如果這樣,那池中不是有很多的對(duì)象,豈不是會(huì)浪費(fèi)很多的資源,這個(gè)問題的解決方案是你可以設(shè)置與數(shù)據(jù)庫(kù)的特定連接時(shí)間(默認(rèn)60秒),如果在這個(gè)時(shí)間內(nèi)未被使用,.NET提供就會(huì)關(guān)閉此連接。

                如何打開連接池?默認(rèn)情況下是打開的.

                如何關(guān)閉連接池?可以使用OleDbConnection.ReleaseConnectionPool()方法來關(guān)閉連接池,更或者你可以在OLE DB連接字符串中加上OLE DB Services= - 4;在用SqlConnection對(duì)象時(shí)可在連接符中加上Pooling=False。這時(shí)你再調(diào)用Close()時(shí)候便會(huì)真正地關(guān)閉與數(shù)據(jù)庫(kù)的連接。

          (注1:可以使用SQL事件探查器或性能監(jiān)視器來觀察連接到數(shù)據(jù)庫(kù)中的連接數(shù)目,以識(shí)別連接是否真正關(guān)閉或是只是放入池中。)

          (注2:可以顯式調(diào)用Dispose()方法在垃圾收集器回收之前釋放資源,但如果你只是將Connection對(duì)象設(shè)為NULL的話,是不會(huì)斷開與數(shù)據(jù)源的連接的)

                利用Connection對(duì)象來創(chuàng)建Command對(duì)象:(ADO.NET中用Command對(duì)象來執(zhí)行數(shù)據(jù)查詢,更新)例 :

          SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          using (OleDbCommand cmd=con.CreateCommadn())

          {

                cmd.CommandText="select * from table";

                cmd.ExecuteNonQuery();

          }

          (注:此處使用using 的好處是在進(jìn)行此次操作后便可釋放資源。)

          利用Connection對(duì)象來創(chuàng)建Transaction對(duì)象:(Transaction對(duì)象是ADO.NET中的事務(wù)管理對(duì)象)

          例:

          SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          con.Open();

          OleDbTransaction tran=con.BeginTransaction(); (注:調(diào)用此方法會(huì)在連接時(shí)返回一個(gè)新的打開的Transaction對(duì)象來進(jìn)行事務(wù)管理)

          (注:事務(wù)是指一組單一實(shí)體運(yùn)行的語句,可以確保數(shù)據(jù)的完整性,防止因系統(tǒng)故障或其它原因而引起的數(shù)據(jù)丟失。概念很抽象,呵呵,看下去就明白了)

          事務(wù)有ACID四個(gè)屬性(即原子性,一致性,隔離性,持久性):

          原子性指在執(zhí)行事務(wù)過程中,這個(gè)過程要么成功執(zhí)行,要么不執(zhí)行。

          一致性指事務(wù)前和事務(wù)后的數(shù)據(jù)的一致性,也就是如果事務(wù)成功執(zhí)行的話,系統(tǒng)就返回成功的狀態(tài),即所有數(shù)據(jù)的改變標(biāo)記為已完成,如沒完成事務(wù),即回滾,并回到先前的合法狀態(tài)。

          隔離性指一個(gè)事務(wù)內(nèi)的任何變化都獨(dú)立于其它的事務(wù)(相對(duì)于兩個(gè)事務(wù)的說法)

          持久性指事務(wù)是持續(xù)的,也就是事務(wù)成功完成后的改變是永久的。

          (注:事務(wù)有手動(dòng)和自動(dòng)兩種,本文的主題不在此,事務(wù)的介紹在其它篇章會(huì)涉及到)

                取得數(shù)據(jù)庫(kù)的架構(gòu)信息:

            有時(shí)你會(huì)發(fā)覺有需要獲取數(shù)據(jù)庫(kù)的架構(gòu)信息來方便程序的運(yùn)行。可使用OleDbConnection對(duì)象的GetOleDbSchemaTable()方法來獲取,它需要一個(gè)參數(shù)用來作返回的架構(gòu)信息的過濾器,即只獲取表中的列或行信息,不寫此參數(shù)則獲取整個(gè)表所有列的信息。

          例:

          OleDbConnectioncon=new OleDbConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          con.Open();

          DataTable dt=con.GetOleDbSchemaTable(OleDbSchamaGuid,null);

          foreach(DataRow row in dt.Rows)

          Console.WriteLine(row["column_name"].ToString());

          ---------------------------------------------------------------

          關(guān)于AD.NET的連接對(duì)象還有很多有用的方法,具體查MSDN。


          posted on 2005-04-12 14:59 笨笨 閱讀(700) 評(píng)論(0)  編輯  收藏 所屬分類: ALL.NET
          主站蜘蛛池模板: 昭平县| 修水县| 钟祥市| 康定县| 洛隆县| 恩平市| 乌鲁木齐市| 深圳市| 旅游| 珲春市| 囊谦县| 称多县| 平度市| 玉山县| 济宁市| 当阳市| 金阳县| 永德县| 敦煌市| 兴义市| 田林县| 贵溪市| 松原市| 永德县| 井冈山市| 顺义区| 墨竹工卡县| 吉木萨尔县| 凭祥市| 柘城县| 赤城县| 临高县| 西藏| 集安市| 雅安市| 庆城县| 梓潼县| 余姚市| 南岸区| 山阳县| 鸡西市|