全面講解ADO.NET鏈接對(duì)象重要性
鏈接是一種很重要的資源,可以讓我們把不相關(guān)的東西鏈接起來,在ADO .NET提供了一種 ADO.NET鏈接對(duì)象。不論何時(shí)客戶端需要一個(gè)鏈接,返回的是鏈接池中的對(duì)象。一旦鏈接關(guān)閉,對(duì)象不是留給碎片收集器,而是釋放到池中,供其它調(diào)用者使用。 鏈接池不是由ADO .NET直接管理。SQL Server鏈接依靠Windows? 2000服務(wù)組件地pooling服務(wù)。每個(gè)鏈接池通過確切的匹配法則與不同的鏈接字符串相關(guān)。一旦創(chuàng)建,SQL Server鏈接池至到活動(dòng)過程終止,它才會(huì)終結(jié)。
#T#相反,OLE DB鏈接被很小心的集中在OLE DB提供者會(huì)話對(duì)象的內(nèi)部實(shí)現(xiàn)中。會(huì)話集中和自動(dòng)收集是通過OLE DB服務(wù)完成,并通過注冊(cè)設(shè)置在每一個(gè)提供者基礎(chǔ)上被激活。因此,自動(dòng)鏈接池并不會(huì)發(fā)生在所有OLE DB 提供者上,所有設(shè)備上。關(guān)于ADO.NET鏈接對(duì)象,最后要指出的是,鏈接類是不可繼承的。你不能從SqlConnection 或 OleDbConnection中創(chuàng)建一個(gè)新類。這樣做是出于代碼安全方面的考慮。然而,你可以創(chuàng)建你自己的類,在類中包含一個(gè)或多個(gè)ADO.NET鏈接對(duì)象。使用直接命令在向數(shù)據(jù)提供者發(fā)送命令前,要確保鏈接已經(jīng)打開。默認(rèn)鏈接是關(guān)閉的。然后,執(zhí)行命令,只要有可能就關(guān)閉鏈接以確保其他客戶能得到重要資源。
SqlCommand類提供了用于執(zhí)行命令的四個(gè)方法。它們是:ExecuteReader, ExecuteNonQuery, ExecuteScalar,及最新的但不是最小的,ExecuteXmlReader.從本質(zhì)上講,這些方法在期望的輸入上不同,返回的結(jié)果不同而已。通常,在操作完成后,需要確定使用的方法而不是繼續(xù)向前。順便指出,OleDbCommand 對(duì)象不支持ExecuteXmlReader.ExecuteReader用于執(zhí)行選擇記錄的查詢命令或存儲(chǔ)過程。它返回一個(gè)或多個(gè)結(jié)果集。
- cmd.Connection.Open();
- SqlDataReader dr = cmd.ExecuteReader();
- // 處理結(jié)果集
- cmd.Connection.Close();
你可以通過SqlDataReader對(duì)象訪問選擇的記錄,使用Read方法在記錄間循環(huán)。使用NextResults方法移動(dòng)到下一結(jié)果集。ExecuteNonQuery用于執(zhí)行命令或存儲(chǔ)過程,它影響特定表的狀態(tài)。這只意味著一個(gè)查詢命令。通常使用此方法執(zhí)行INSERT, UPDATE, DELETE, CREATE, SET語句。ExecuteNonQuery只返回命令所影響到的行數(shù),如果得不到信息則返回-1.它并不能使你訪問語句或存儲(chǔ)過程生成的結(jié)果集。實(shí)際上,無法阻止你用此方法執(zhí)行一條查詢命令,但在這種情況下,你既得不到結(jié)果集也得不到被影響的行數(shù)。
- cmd.Connection.Open();
- nRecsAffected = cmd.ExecuteNonQuery();
- cmd.Connection.Close();
- //此處檢查影響到的記錄
通過SqlCommand對(duì)象的RecordsAffected屬性可以得到影響到的行數(shù)。如果發(fā)生錯(cuò)誤或如果執(zhí)行的昌查詢命令,此屬性值為-1.ExecuteScalar期望執(zhí)行查詢命令,或更可能是一個(gè)存儲(chǔ)過程,它返回?cái)?shù)據(jù)。然而,此方法與ExecuteReader方法不同,它只將得到的結(jié)果集中的第一行第一列的值作為標(biāo)量值返回。
- cmd.Connection.Open();
- Object o = cmd.ExecuteScalar();
- cmd.Connection.Close();
- // work on the scalar here
此方法將值作為一個(gè)封裝對(duì)象返回。然后由你來解包或?qū)⒋酥翟煨蜑檎_的期望類。如果需要對(duì)數(shù)據(jù)執(zhí)行具有統(tǒng)計(jì)或集合性質(zhì)的操作,ExecuteScalar方法將特別有用。在這些或相似的情況下,你可能只希望返回給調(diào)用者一個(gè)值。由于它的使用場(chǎng)合,你或多或少的對(duì)存儲(chǔ)過程而不是單個(gè)SQL語句使用此方法。ExecuteXmlReader方法在SELECT命令執(zhí)行后,構(gòu)建并返回一個(gè)XmlReader對(duì)象,它利用了存在于SQL Server 2000中的XML特性。

















