课件ADONET开发高手系列.ppt_第1页
课件ADONET开发高手系列.ppt_第2页
课件ADONET开发高手系列.ppt_第3页
课件ADONET开发高手系列.ppt_第4页
课件ADONET开发高手系列.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ADO.NET 開發高手系列,台灣微軟資深特約講師 從 1993 年開始於台灣微軟主講研討會 台灣微軟最有價值專家 兩度當選 MVP 資深電腦圖書作家 擁有 60 本以上的著作,主講人:章立民,ADO.NET 開發高手線上教學課程 第四個單元 如何連接資料來源,連接的基本流程,建立 Connection 物件。 開啟連接。 將命令透過連接傳送至資料來源執行並取得所傳回的資料。 執行所需的處理並關閉連接。,如何連接至 SQL Server,建立一個 SqlConnection 物件。 呼叫 SqlConnection 物件的 Open 方法來開啟連接。 將命令透過連接傳送至資料來源執行並取得所傳回的資料。 執行所需的處理並呼叫 SqlConnection 物件的 Close 方法來關閉連接。,建立 SqlConnection 物件,使用程式碼建立。 使用 SqlConnection 類別的建構函式。 擁有兩個多載版本。 使用 Visual Studio .NET 的資料設計工具來建立。,使用不內含任何參數的建構函式(1/2),預設建構函式。 使用預設建構函式建立之 SqlConnection 物件的屬性初值: ConnectionString、Database與DataSource 屬性的初值是空字串(“)。 ConnectionTimeout 屬性的初值是 15。 建立 SqlConnection 物件之後緊接著設定其 ConnectionString 屬性以便指定連接字串。,使用不內含任何參數的建構函式(2/2), 建立一個 SqlConnection 物件 Dim myConnection As New SqlConnection() 指定用來開啟SQL Server資料庫的連接字串 myConnection.ConnectionString = _ “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30 “ Try 開啟連接 myConnection.Open() 用來處理資料的程式碼請在此處繼續撰寫 Catch ex As Exception MessageBox.Show(“無法連接至資料來源。“) Finally 關閉連接 myConnection.Close() End Try,使用內含連接字串參數的建構函式, 宣告一個字串變數來儲存連接字串 Dim myConnectString As String = _ “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30“ 使用連接字串來建立一個 SqlConnection 物件 Dim myConnection As New SqlConnection(myConnectString) Try 開啟連接 myConnection.Open() 用來處理資料的程式碼請在此處繼續撰寫 Catch ex As Exception MessageBox.Show(“無法連接至資料來源。“) Finally 關閉連接 myConnection.Close() End Try,連接字串會內含連接(或登入)至一個資料來源時所需的各項資訊。 連接字串中的各個設定項目稱為關鍵字(Keyword),其語法格式如下所示: “keyword1value;keyword2value;keyword3value “ 連接字串範例: “Persist Security Info=False;Integrated Security=SSPI; “ Connect Timeout=30“,連接字串的關鍵字說明(1/8),連接字串的關鍵字說明(2/8),連接字串的關鍵字說明(3/8),連接字串的關鍵字說明(4/8),連接字串的關鍵字說明(5/8),連接字串的關鍵字說明(6/8),連接字串的關鍵字說明(7/8),連接字串的關鍵字說明(8/8),連接字串注意事項(1/4),如果某個關鍵字在連接字串中出現好幾次,將採用最後一次出現的設定。 關鍵字不區分大小寫。 如果關鍵字的設定值是布林值,您可以使用 yes 代替 true,使用 no 代替 false。整數值會被表示為字串。 SQL Server .NET Framework 資料提供者會使用它自己的通訊協定來與 SQL Server 通訊。由於它並沒有加入 ODBC 層,因此,當連接至 SQL Server 時不支援使用一個 ODBC 資料來源名稱(DSN)。,連接字串注意事項(2/4),關鍵字之設定值本身就內含分號時的處理方式: 如果設定值本身就內含分號、單引號或雙引號,則必須將此設定值內含於雙引號中。 如果設定值同時內含分號與雙引號字元,則必須將此設定值內含於單引號中。 如果設定值是以雙引號開頭的,也可以使用單引號 。 如果設定值是以單引號開頭的,就可以使用雙引號。 如果設定值同時含有單引號與雙引號字元,則用來包含設定值的引號字元每次出現在設定值中時,都必須變成兩個引號。,連接字串注意事項(3/4),要在字串值中內含前置或後置空白時的處理方式: 必須將設定值內含於單引號或雙引號中。 整數、布林值或列舉值前後的任何前置或後置空白都會被忽略,即使內含在引號中也是一樣。 使用 .NET Framework 1.1 版時,除非設定值的第一個或最後一個字元是引號字元,否則您可以在連接字串中使用單引號或雙引號,而不需要使用分隔符號(例如:Data Source= my Server 或 Data Source= my“Server)。,連接字串注意事項(4/4),如果要在關鍵字或設定值中內含等號(=),則必須在前面加上另外一個等號。以如下所示的連接字串而言,關鍵字為 key=word,而設定值為 value: “key=word=value“,範例,DemoForm1.vb 示範如何使用 Windows 驗證與 SQL Server 驗證來連接至本機電腦之 MSDE 中所指定的 SQL Server 資料庫。 SQL Server 驗證的先決條件:SQL Server 之安全性驗證模式必須設定成混合驗證模式。,以視覺化方式連接至 SQL Server,實作演練: 示範如何在設計階段建立一個 SqlConnection 物件來連接至本機電腦之 MSDE 中的北風貿易資料庫。,伺服器總管,建立通往 SQL Server 與其他資料庫的資料連接。 開啟資料連接。 登入伺服器並顯示其資料庫與系統服務。 檢視可用的 Web 服務,以及可用的方法與結構描述的相關資訊。 儲存資料庫專案與參考。 將節點從伺服器總管拖曳到 Visual Studio .NET 專案,如此會建立可參考資料資源或監視其活動的資料元件。 將Visual Studio .NET 專案所建立的資料元件以程式設計的方式與資料資源進行互動。,安全性議題: SQL Server 驗證 vs Windows 驗證,SQL Server 驗證的缺點:會將使用者識別碼與密碼公開於連接字串中,可能產生潛在的安全漏洞。 Windows 驗證(整合式安全性,亦即信任的連接)並不需要公開連接字串中的使用者識別碼與密碼,因此是連接至 SQL Server 最安全的方式,也是我們所極力推薦的驗證連接方式。 整合式安全性的缺點:整合式安全性需要 Windows 帳戶,因此如果您使用個別的 Windows 帳戶來模擬每一個已驗證的主體,則將會影響連接共用。 解決之道:模擬限制數量的 Windows 帳戶,而且每一個帳戶代表特定的角色。,ConnectionString 屬性,只有當連接處於關閉狀態時才可以設定。 重新設定一個關閉狀態之連接的 ConnectionString 屬性,將使得所有的連接字串值與相關屬性被重新設定。 Database= Northwind 更改成 Server=myserver;Integrated Security=SSPI 連接字串在被設定之後會立即被剖析。 關鍵字 Persist Security Info 的設定影響。,ConnectionTimeout 屬性,唯讀的屬性。 取得嘗試建立連接的等待時間(單位:秒)。 0 表示沒有限制,但是由於嘗試連接會永遠等待,因此應該避免在連接字串中使用。,Database 屬性,連接處於關閉狀態時:傳回您當初建立 SqlConnection 物件時於連接字串中使用Initial Catalog 或 Database 關鍵字所指定的資料庫名稱。 連接處於開啟狀態時:傳回連接目前所使用的資料庫名稱。 唯讀的屬性不能使用 Database 屬性來改變連接所使用的資料庫: 請使用 ChangeDatabase 方法來改變連接所使用的資料庫。,DataSource 屬性,取得 SqlConnection 物件所要連接之 SQL Server 執行個體的名稱。 唯讀的屬性。,PacketSize 屬性,唯讀的屬性。 取得用來與 SQL Server 執行個體通訊之網路封包的大小(單位:位元組)。 預設值是 8192。 當執行大量複製作業,亦或是傳送或接收大量的 text 或 image 資料,應將使用大於預設值的封包大小。 當傳送與接收少量的資訊,建議將封包大小設定為 512 個位元組。 PacketSize 應該介於 512 到 32767。,ServerVersion 屬性,唯讀的屬性。 取得一個已開啟之連接所連接之 SQL Server 執行個體的版本。 版本編號的格式為 #.#.#(主號.次號.組建) 主要版本 次要版本 發行版本,State 屬性,唯讀的屬性。 取得連接目前的狀態: 0 關閉 1 開啟,WorkstationId 屬性,唯讀的屬性。 取得用以識別資料庫用戶端的字串。,範例,DemoForm2.vb 示範如何在執行階段動態連接至本機電腦上執行個體名稱為 (local)NetSDK 之 MSDE 中的各個使用者資料庫。,Open 與 Close方法,Open 方法使用連接字串中的資訊來連結資料來源並建立開放連接。 Close 方法會關閉連接。關閉連接是非常重要的,因為大多數的資料來源僅支援有限數目的開放連接,而且開放連接會佔用寶貴的系統資源。 某些資料元件的方法會自動開啟與關閉連接。例如:資料配接器的 Fill 與 Update 方法。 假如連接尚未開啟,則像是 Fill 等方法會自動開啟與關閉連接。但是如果連接已經是開啟的,方法會直接使用它但是不會去關閉它。 Close 方法會復原所有暫時停止的交易。,ChangeDatabase 方法,更改一個已開啟之連接所使用的資料庫。,SqlConnection.InfoMessage 事件(1/2),當 SQL Server 傳回警告或資訊訊息時便會引發 SqlConnection 物件的 InfoMessage 事件,因此您可以使用此事件從資料來源取得警告與資訊訊息。 以 SQL Server 為例,任何嚴重性為 10 或以下的訊息都屬於資訊性,而且可以使用 InfoMessage 事件加以捕捉。,SqlConnection.InfoMessage 事件(2/2),用戶端應該建立 SqlInfoMessageEventHandler 委派來聆聽 InfoMessage 事件。,範例,DemoForm3.vb 它示範如何針對 MSDE 上的 Pubs 資料庫執行 DBCC CHECKDB 陳述式,並使用 InfoMessage 事件從資料來源取得資訊訊息,以便瞭解 DBCC CHECKDB 陳述式的執行狀況。,SqlConnection.StateChange 事件,發生於連接的狀態變更時。 事件處理常式接收 StateChangeEventArgs 型別的引數。,範例,DemoForm4.vb 示範如何使用 StateChange 事件來察覺連接在開啟與關閉間的轉換,以便視需要執行必要的處理。,如何捕捉資料提供者所引發的例外狀況,SqlException SqlError SqlErrorCollection,範例,DemoForm5.vb 示範如何攔截例外狀況並處理來自 SqlException 類別的 Errors 集合。,連接共用(Connection Pooling),目的:讓應用程式能夠重複使用共用集區(Pool)中現有的連接,而不需要反覆地建立新的連接: 改善應用程式的延展性(Scalability) 改善應用程式的效能(Performance) 假如您的應用程式只需要連接資料庫非常短暫的時間,而且於應用程式的執行期間需要頻繁地開啟與關閉連接,則您應該考慮使用連接共用。 連接共用的觀念: 使用共用集區中既存的連接或是建立一個新的共用集區。 ADO.NET 使用完全相符演算法來根據連接內的連接字串去建立一個共用集區 。,連接共用範例,Dim myConnection1 As New SqlConnection( _ “Persist Security Info=False;Integrated Security=SSPI; “ Database=Northwind“) myConnection3.Open() 此連接字串與共用集區 1 完全相符,於共用集區中加入連接,ADO.NET 會替每一個唯一的連接字串建立共用集區,並隨即建立多個連接物件並將其加入共用集區中,以便滿足共用集區最小連接數目的要求。接下來,會視需要將連接加入共用集區中,直到已至共用集區最大連接數目為止。 您可以將共用集區想像成是一個持有目前沒有被使用之連接的設施: SqlConnection.Open 方法會從共用集區中釋放出一個目前沒有被使用的連接給所要求的連接物件使用。 SqlConnection.Close 方法會使得連接又會被傳回至共用集區中並再度能夠被其他的 SqlConnection 物件所使用。 如果已到達共用集區最大連接數目而且共用集區中沒有任何連接可以使用,則要求會被排入佇列當中。,移除共用集區中的連接,如果已超過連接的存留期或偵測到與伺服器的連接已經中斷,便會將共用集區中的連接移除。 ADO.NET 會定期掃瞄共用集區,尋找已被釋放至共用集區且標示為無效的物件,然後這些連接會被永久移除。 如果存在的連接是連結至一個不存在的伺服器,則即使 ADO.NET 尚未偵測到中斷的連接且將其標示為無效,仍然可能從共用集區中取得這個連接。,使用連接字串關鍵字來控制連接共用,Pooling Connection Lifetime Connection Reset Enlist Max Pool Size Min Pool Size,關鍵字 Pooling,決定是否啟用連接共用。 預設值是 True。 要求某一個資料庫連接不要被保留於連接共用中: Dim myConnection As New SqlConnection( _ “Persist Security Info=False;Integrated Security=SSPI; “ Pooling=false“),關鍵字 Min Pool Size,設定共用集區中至少要持有多少個連接。 預設值是 0 。 如果您經常需要同時使用多個連接來存取特定的資料來源,可以將此關鍵字設定成大於 0 的數值。,關鍵字 Max Pool Size,設定共用集區中最多能夠持有多少個連接。 預設值是 100。 如果連接物件要求一個連接,而共用集區中的連接數目已到達上限時.,等待 Connection Timeout 所指定的時間,如果時間過了之後仍然沒有連接可以使用,擲回一個 InvalidOperationException 例外狀況。 範例:DemoForm6.vb,關鍵字 Connection Reset,決定當連接從共用集區取出後是否會重新設定。 預設值是 True。 對 SQL Server 7.0 而言,將 Connection Reset 設定成 false 可避免取得連接時需要額外地來回存取伺服器,但是您必須注意連接狀態(例如:資料庫內容)沒有被重設。 範例:DemoForm7.vb,關鍵字 Connection Lifetime,當一個連接被傳回共用集區時,其建立時間會與目前時間相比較,如果兩者差距的時間超過 Connection Lifetime 所指定的值(單位是秒),則連接會被移除。 預設值是 0,它會使得共用連接擁有最長的存留期。,關鍵字 Enlist,Enlist 屬性的預設值是 True,表示如果交易內容存在,則 ADO.NET 會自動在建立執行緒的目前交易內容中登記連接。,監控連接共用,使用 SQL Server 2000 的 Profiler 工具。 使用 Windows 2000 Server 或 Windows Server 2003 的效能系統工具: SQL Server .NET Framewo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论