已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ADO.NET 開發(fā)高手系列,臺(tái)灣微軟資深特約講師 從 1993 年開始於臺(tái)灣微軟主講研討會(huì) 臺(tái)灣微軟最有價(jià)值專家 兩度當(dāng)選 MVP 資深電腦圖書作家 擁有 60 本以上的著作,主講人:章立民,ADO.NET 開發(fā)高手線上教學(xué)課程 第四個(gè)單元 如何連接資料來源,連接的基本流程,建立 Connection 物件。 開啟連接。 將命令透過連接傳送至資料來源執(zhí)行並取得所傳回的資料。 執(zhí)行所需的處理並關(guān)閉連接。,如何連接至 SQL Server,建立一個(gè) SqlConnection 物件。 呼叫 SqlConnection 物件的 Open 方法來開啟連接。 將命令透過連接傳送至資料來源執(zhí)行並取得所傳回的資料。 執(zhí)行所需的處理並呼叫 SqlConnection 物件的 Close 方法來關(guān)閉連接。,建立 SqlConnection 物件,使用程式碼建立。 使用 SqlConnection 類別的建構(gòu)函式。 擁有兩個(gè)多載版本。 使用 Visual Studio .NET 的資料設(shè)計(jì)工具來建立。,使用不內(nèi)含任何參數(shù)的建構(gòu)函式(1/2),預(yù)設(shè)建構(gòu)函式。 使用預(yù)設(shè)建構(gòu)函式建立之 SqlConnection 物件的屬性初值: ConnectionString、Database與DataSource 屬性的初值是空字串(“)。 ConnectionTimeout 屬性的初值是 15。 建立 SqlConnection 物件之後緊接著設(shè)定其 ConnectionString 屬性以便指定連接字串。,使用不內(nèi)含任何參數(shù)的建構(gòu)函式(2/2), 建立一個(gè) SqlConnection 物件 Dim myConnection As New SqlConnection() 指定用來開啟SQL Server資料庫的連接字串 myConnection.ConnectionString = _ “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30 “ Try 開啟連接 myConnection.Open() 用來處理資料的程式碼請(qǐng)?jiān)诖颂幚^續(xù)撰寫 Catch ex As Exception MessageBox.Show(“無法連接至資料來源?!? Finally 關(guān)閉連接 myConnection.Close() End Try,使用內(nèi)含連接字串參數(shù)的建構(gòu)函式, 宣告一個(gè)字串變數(shù)來儲(chǔ)存連接字串 Dim myConnectString As String = _ “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30“ 使用連接字串來建立一個(gè) SqlConnection 物件 Dim myConnection As New SqlConnection(myConnectString) Try 開啟連接 myConnection.Open() 用來處理資料的程式碼請(qǐng)?jiān)诖颂幚^續(xù)撰寫 Catch ex As Exception MessageBox.Show(“無法連接至資料來源?!? Finally 關(guān)閉連接 myConnection.Close() End Try,連接字串會(huì)內(nèi)含連接(或登入)至一個(gè)資料來源時(shí)所需的各項(xiàng)資訊。 連接字串中的各個(gè)設(shè)定項(xiàng)目稱為關(guān)鍵字(Keyword),其語法格式如下所示: “keyword1value;keyword2value;keyword3value “ 連接字串範(fàn)例: “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30“,連接字串的關(guān)鍵字說明(1/8),連接字串的關(guān)鍵字說明(2/8),連接字串的關(guān)鍵字說明(3/8),連接字串的關(guān)鍵字說明(4/8),連接字串的關(guān)鍵字說明(5/8),連接字串的關(guān)鍵字說明(6/8),連接字串的關(guān)鍵字說明(7/8),連接字串的關(guān)鍵字說明(8/8),連接字串注意事項(xiàng)(1/4),如果某個(gè)關(guān)鍵字在連接字串中出現(xiàn)好幾次,將採用最後一次出現(xiàn)的設(shè)定。 關(guān)鍵字不區(qū)分大小寫。 如果關(guān)鍵字的設(shè)定值是布林值,您可以使用 yes 代替 true,使用 no 代替 false。整數(shù)值會(huì)被表示為字串。 SQL Server .NET Framework 資料提供者會(huì)使用它自己的通訊協(xié)定來與 SQL Server 通訊。由於它並沒有加入 ODBC 層,因此,當(dāng)連接至 SQL Server 時(shí)不支援使用一個(gè) ODBC 資料來源名稱(DSN)。,連接字串注意事項(xiàng)(2/4),關(guān)鍵字之設(shè)定值本身就內(nèi)含分號(hào)時(shí)的處理方式: 如果設(shè)定值本身就內(nèi)含分號(hào)、單引號(hào)或雙引號(hào),則必須將此設(shè)定值內(nèi)含於雙引號(hào)中。 如果設(shè)定值同時(shí)內(nèi)含分號(hào)與雙引號(hào)字元,則必須將此設(shè)定值內(nèi)含於單引號(hào)中。 如果設(shè)定值是以雙引號(hào)開頭的,也可以使用單引號(hào) 。 如果設(shè)定值是以單引號(hào)開頭的,就可以使用雙引號(hào)。 如果設(shè)定值同時(shí)含有單引號(hào)與雙引號(hào)字元,則用來包含設(shè)定值的引號(hào)字元每次出現(xiàn)在設(shè)定值中時(shí),都必須變成兩個(gè)引號(hào)。,連接字串注意事項(xiàng)(3/4),要在字串值中內(nèi)含前置或後置空白時(shí)的處理方式: 必須將設(shè)定值內(nèi)含於單引號(hào)或雙引號(hào)中。 整數(shù)、布林值或列舉值前後的任何前置或後置空白都會(huì)被忽略,即使內(nèi)含在引號(hào)中也是一樣。 使用 .NET Framework 1.1 版時(shí),除非設(shè)定值的第一個(gè)或最後一個(gè)字元是引號(hào)字元,否則您可以在連接字串中使用單引號(hào)或雙引號(hào),而不需要使用分隔符號(hào)(例如:Data Source= my Server 或 Data Source= my“Server)。,連接字串注意事項(xiàng)(4/4),如果要在關(guān)鍵字或設(shè)定值中內(nèi)含等號(hào)(=),則必須在前面加上另外一個(gè)等號(hào)。以如下所示的連接字串而言,關(guān)鍵字為 key=word,而設(shè)定值為 value: “key=word=value“,範(fàn)例,DemoForm1.vb 示範(fàn)如何使用 Windows 驗(yàn)證與 SQL Server 驗(yàn)證來連接至本機(jī)電腦之 MSDE 中所指定的 SQL Server 資料庫。 SQL Server 驗(yàn)證的先決條件:SQL Server 之安全性驗(yàn)證模式必須設(shè)定成混合驗(yàn)證模式。,以視覺化方式連接至 SQL Server,實(shí)作演練: 示範(fàn)如何在設(shè)計(jì)階段建立一個(gè) SqlConnection 物件來連接至本機(jī)電腦之 MSDE 中的北風(fēng)貿(mào)易資料庫。,伺服器總管,建立通往 SQL Server 與其他資料庫的資料連接。 開啟資料連接。 登入伺服器並顯示其資料庫與系統(tǒng)服務(wù)。 檢視可用的 Web 服務(wù),以及可用的方法與結(jié)構(gòu)描述的相關(guān)資訊。 儲(chǔ)存資料庫專案與參考。 將節(jié)點(diǎn)從伺服器總管拖曳到 Visual Studio .NET 專案,如此會(huì)建立可參考資料資源或監(jiān)視其活動(dòng)的資料元件。 將Visual Studio .NET 專案所建立的資料元件以程式設(shè)計(jì)的方式與資料資源進(jìn)行互動(dòng)。,安全性議題: SQL Server 驗(yàn)證 vs Windows 驗(yàn)證,SQL Server 驗(yàn)證的缺點(diǎn):會(huì)將使用者識(shí)別碼與密碼公開於連接字串中,可能產(chǎn)生潛在的安全漏洞。 Windows 驗(yàn)證(整合式安全性,亦即信任的連接)並不需要公開連接字串中的使用者識(shí)別碼與密碼,因此是連接至 SQL Server 最安全的方式,也是我們所極力推薦的驗(yàn)證連接方式。 整合式安全性的缺點(diǎn):整合式安全性需要 Windows 帳戶,因此如果您使用個(gè)別的 Windows 帳戶來模擬每一個(gè)已驗(yàn)證的主體,則將會(huì)影響連接共用。 解決之道:模擬限制數(shù)量的 Windows 帳戶,而且每一個(gè)帳戶代表特定的角色。,ConnectionString 屬性,只有當(dāng)連接處於關(guān)閉狀態(tài)時(shí)才可以設(shè)定。 重新設(shè)定一個(gè)關(guān)閉狀態(tài)之連接的 ConnectionString 屬性,將使得所有的連接字串值與相關(guān)屬性被重新設(shè)定。 Database= Northwind 更改成 Server=myserver;Integrated Security=SSPI 連接字串在被設(shè)定之後會(huì)立即被剖析。 關(guān)鍵字 Persist Security Info 的設(shè)定影響。,ConnectionTimeout 屬性,唯讀的屬性。 取得嘗試建立連接的等待時(shí)間(單位:秒)。 0 表示沒有限制,但是由於嘗試連接會(huì)永遠(yuǎn)等待,因此應(yīng)該避免在連接字串中使用。,Database 屬性,連接處於關(guān)閉狀態(tài)時(shí):傳回您當(dāng)初建立 SqlConnection 物件時(shí)於連接字串中使用Initial Catalog 或 Database 關(guān)鍵字所指定的資料庫名稱。 連接處於開啟狀態(tài)時(shí):傳回連接目前所使用的資料庫名稱。 唯讀的屬性不能使用 Database 屬性來改變連接所使用的資料庫: 請(qǐng)使用 ChangeDatabase 方法來改變連接所使用的資料庫。,DataSource 屬性,取得 SqlConnection 物件所要連接之 SQL Server 執(zhí)行個(gè)體的名稱。 唯讀的屬性。,PacketSize 屬性,唯讀的屬性。 取得用來與 SQL Server 執(zhí)行個(gè)體通訊之網(wǎng)路封包的大?。▎挝唬何辉M)。 預(yù)設(shè)值是 8192。 當(dāng)執(zhí)行大量複製作業(yè),亦或是傳送或接收大量的 text 或 image 資料,應(yīng)將使用大於預(yù)設(shè)值的封包大小。 當(dāng)傳送與接收少量的資訊,建議將封包大小設(shè)定為 512 個(gè)位元組。 PacketSize 應(yīng)該介於 512 到 32767。,ServerVersion 屬性,唯讀的屬性。 取得一個(gè)已開啟之連接所連接之 SQL Server 執(zhí)行個(gè)體的版本。 版本編號(hào)的格式為 #.#.#(主號(hào).次號(hào).組建) 主要版本 次要版本 發(fā)行版本,State 屬性,唯讀的屬性。 取得連接目前的狀態(tài): 0 關(guān)閉 1 開啟,WorkstationId 屬性,唯讀的屬性。 取得用以識(shí)別資料庫用戶端的字串。,範(fàn)例,DemoForm2.vb 示範(fàn)如何在執(zhí)行階段動(dòng)態(tài)連接至本機(jī)電腦上執(zhí)行個(gè)體名稱為 (local)NetSDK 之 MSDE 中的各個(gè)使用者資料庫。,Open 與 Close方法,Open 方法使用連接字串中的資訊來連結(jié)資料來源並建立開放連接。 Close 方法會(huì)關(guān)閉連接。關(guān)閉連接是非常重要的,因?yàn)榇蠖鄶?shù)的資料來源僅支援有限數(shù)目的開放連接,而且開放連接會(huì)佔(zhàn)用寶貴的系統(tǒng)資源。 某些資料元件的方法會(huì)自動(dòng)開啟與關(guān)閉連接。例如:資料配接器的 Fill 與 Update 方法。 假如連接尚未開啟,則像是 Fill 等方法會(huì)自動(dòng)開啟與關(guān)閉連接。但是如果連接已經(jīng)是開啟的,方法會(huì)直接使用它但是不會(huì)去關(guān)閉它。 Close 方法會(huì)復(fù)原所有暫時(shí)停止的交易。,ChangeDatabase 方法,更改一個(gè)已開啟之連接所使用的資料庫。,SqlConnection.InfoMessage 事件(1/2),當(dāng) SQL Server 傳回警告或資訊訊息時(shí)便會(huì)引發(fā) SqlConnection 物件的 InfoMessage 事件,因此您可以使用此事件從資料來源取得警告與資訊訊息。 以 SQL Server 為例,任何嚴(yán)重性為 10 或以下的訊息都屬於資訊性,而且可以使用 InfoMessage 事件加以捕捉。,SqlConnection.InfoMessage 事件(2/2),用戶端應(yīng)該建立 SqlInfoMessageEventHandler 委派來聆聽 InfoMessage 事件。,範(fàn)例,DemoForm3.vb 它示範(fàn)如何針對(duì) MSDE 上的 Pubs 資料庫執(zhí)行 DBCC CHECKDB 陳述式,並使用 InfoMessage 事件從資料來源取得資訊訊息,以便瞭解 DBCC CHECKDB 陳述式的執(zhí)行狀況。,SqlConnection.StateChange 事件,發(fā)生於連接的狀態(tài)變更時(shí)。 事件處理常式接收 StateChangeEventArgs 型別的引數(shù)。,範(fàn)例,DemoForm4.vb 示範(fàn)如何使用 StateChange 事件來察覺連接在開啟與關(guān)閉間的轉(zhuǎn)換,以便視需要執(zhí)行必要的處理。,如何捕捉資料提供者所引發(fā)的例外狀況,SqlException SqlError SqlErrorCollection,範(fàn)例,DemoForm5.vb 示範(fàn)如何攔截例外狀況並處理來自 SqlException 類別的 Errors 集合。,連接共用(Connection Pooling),目的:讓應(yīng)用程式能夠重複使用共用集區(qū)(Pool)中現(xiàn)有的連接,而不需要反覆地建立新的連接: 改善應(yīng)用程式的延展性(Scalability) 改善應(yīng)用程式的效能(Performance) 假如您的應(yīng)用程式只需要連接資料庫非常短暫的時(shí)間,而且於應(yīng)用程式的執(zhí)行期間需要頻繁地開啟與關(guān)閉連接,則您應(yīng)該考慮使用連接共用。 連接共用的觀念: 使用共用集區(qū)中既存的連接或是建立一個(gè)新的共用集區(qū)。 ADO.NET 使用完全相符演算法來根據(jù)連接內(nèi)的連接字串去建立一個(gè)共用集區(qū) 。,連接共用範(fàn)例,Dim myConnection1 As New SqlConnection( _ “Persist Security Info=False;Integrated Security=SSPI; “ Database=Northwind“) myConnection3.Open() 此連接字串與共用集區(qū) 1 完全相符,於共用集區(qū)中加入連接,ADO.NET 會(huì)替每一個(gè)唯一的連接字串建立共用集區(qū),並隨即建立多個(gè)連接物件並將其加入共用集區(qū)中,以便滿足共用集區(qū)最小連接數(shù)目的要求。接下來,會(huì)視需要將連接加入共用集區(qū)中,直到已至共用集區(qū)最大連接數(shù)目為止。 您可以將共用集區(qū)想像成是一個(gè)持有目前沒有被使用之連接的設(shè)施: SqlConnection.Open 方法會(huì)從共用集區(qū)中釋放出一個(gè)目前沒有被使用的連接給所要求的連接物件使用。 SqlConnection.Close 方法會(huì)使得連接又會(huì)被傳回至共用集區(qū)中並再度能夠被其他的 SqlConnection 物件所使用。 如果已到達(dá)共用集區(qū)最大連接數(shù)目而且共用集區(qū)中沒有任何連接可以使用,則要求會(huì)被排入佇列當(dāng)中。,移除共用集區(qū)中的連接,如果已超過連接的存留期或偵測(cè)到與伺服器的連接已經(jīng)中斷,便會(huì)將共用集區(qū)中的連接移除。 ADO.NET 會(huì)定期掃瞄共用集區(qū),尋找已被釋放至共用集區(qū)且標(biāo)示為無效的物件,然後這些連接會(huì)被永久移除。 如果存在的連接是連結(jié)至一個(gè)不存在的伺服器,則即使 ADO.NET 尚未偵測(cè)到中斷的連接且將其標(biāo)示為無效,仍然可能從共用集區(qū)中取得這個(gè)連接。,使用連接字串關(guān)鍵字來控制連接共用,Pooling Connection Lifetime Connection Reset Enlist Max Pool Size Min Pool Size,關(guān)鍵字 Pooling,決定是否啟用連接共用。 預(yù)設(shè)值是 True。 要求某一個(gè)資料庫連接不要被保留於連接共用中: Dim myConnection As New SqlConnection( _ “Persist Security Info=False;Integrated Security=SSPI; “ Pooling=false“),關(guān)鍵字 Min Pool Size,設(shè)定共用集區(qū)中至少要持有多少個(gè)連接。 預(yù)設(shè)值是 0 。 如果您經(jīng)常需要同時(shí)使用多個(gè)連接來存取特定的資料來源,可以將此關(guān)鍵字設(shè)定成大於 0 的數(shù)值。,關(guān)鍵字 Max Pool Size,設(shè)定共用集區(qū)中最多能夠持有多少個(gè)連接。 預(yù)設(shè)值是 100。 如果連接物件要求一個(gè)連接,而共用集區(qū)中的連接數(shù)目已到達(dá)上限時(shí).,等待 Connection Timeout 所指定的時(shí)間,如果時(shí)間過了之後仍然沒有連接可以使用,擲回一個(gè) InvalidOperationException 例外狀況。 範(fàn)例:DemoForm6.vb,關(guān)鍵字 Connection Reset,決定當(dāng)連接從共用集區(qū)取出後是否會(huì)重新設(shè)定。 預(yù)設(shè)值是 True。 對(duì) SQL Server 7.0 而言,將 Connection Reset 設(shè)定成 false 可避免取得連接時(shí)需要額外地來回存取伺服器,但是您必須注意連接狀態(tài)(例如:資料庫內(nèi)容)沒有被重設(shè)。 範(fàn)例:DemoForm7.vb,關(guān)鍵字 Connection Lifetime,當(dāng)一個(gè)連接被傳回共用集區(qū)時(shí),其建立時(shí)間會(huì)與目前時(shí)間相比較,如果兩者差距的時(shí)間超過 Connection Lifetime 所指定的值(單位是秒),則連接會(huì)被移除。 預(yù)設(shè)值是 0,它會(huì)使得共用連接擁有最長的存留期。,關(guān)鍵字 Enlist,Enlist 屬性的預(yù)設(shè)值是 True,表示如果交易內(nèi)容存在,則 ADO.NET 會(huì)自動(dòng)在建立執(zhí)行緒的目前交易內(nèi)容中登記連接。,監(jiān)控連接共用,使用 SQL Server 2000 的 Profiler 工具。 使用 Windows 2000 Server 或 Windows Server 2003 的效能系統(tǒng)工具: SQL Server .NET Framewo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度廟會(huì)場(chǎng)地租賃合同及廟會(huì)活動(dòng)宣傳推廣服務(wù)合同2篇
- 2025年飼料添加劑安全檢測(cè)采購合同范本3篇
- 2025年食品行業(yè)互聯(lián)網(wǎng)銷售平臺(tái)合作協(xié)議3篇
- 鄭州鐵路職業(yè)技術(shù)學(xué)院《信息技術(shù)輔助歷史教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度鋰電池貨物運(yùn)輸合同范本及安全措施
- 2025年度床墊電商平臺(tái)合作銷售合同3篇
- 2025年度數(shù)字貨幣交易承債式公司股權(quán)轉(zhuǎn)讓合同4篇
- 2024石渣石粉礦山開采與購銷綜合管理服務(wù)合同3篇
- 2025年度5G通信網(wǎng)絡(luò)建設(shè)變更合同補(bǔ)充協(xié)議3篇
- 二零二五版跨境天然氣輸送項(xiàng)目投資分析及合同規(guī)劃3篇
- 乳腺癌的綜合治療及進(jìn)展
- 【大學(xué)課件】基于BGP協(xié)議的IP黑名單分發(fā)系統(tǒng)
- 2025年八省聯(lián)考高考語文試題真題解讀及答案詳解課件
- 2024安全員知識(shí)考試題(全優(yōu))
- 第六單元 中華民族的抗日戰(zhàn)爭 教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版八年級(jí)歷史上冊(cè)
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗(yàn)收規(guī)范
- 知識(shí)庫管理規(guī)范大全
- 弘揚(yáng)教育家精神爭做四有好老師心得10篇
- 采油廠聯(lián)合站的安全管理對(duì)策
- 苗醫(yī)行業(yè)現(xiàn)狀分析
- 昆明手繪版旅游攻略
評(píng)論
0/150
提交評(píng)論