在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

SQL Server 連接基礎知識

SQL Server 連接基礎知識

更新時間:2025-10-20 文章作者:未知 信息來源:網絡 閱讀次數:

數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應...
數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。
引言
  該堆棧的頂部是 API 或對象庫層。應用程序通過對象庫公開的 API 函數或接口連接到 Microsoft® SQL Server。用于訪問 SQL Server 的 API 示例包括 ODBC 和 DB-Library。用于訪問 SQL Server 的對象庫示例包括 OLE DB、ADO 和 ADO.NET。由于 ADO 最終使用 OLE DB 與服務器通信,因此 Windows 應用程序在與 SQL Server 通信時實際上只使用兩個常用的對象庫,即 OLE DB 和 ADO.NET。由于通過 ADO 或 ADO.NET 進行連接通常比通過 ODBC 進行連接更普遍(但 SQL Server 的查詢分析器和企業管理器仍通過 ODBC 進行連接),因此本文將從 ADO/OLE DB 和 ADO.NET 的角度介紹 SQL Server 連接體系結構的客戶端。如今,大多數應用程序均通過對象庫(而非 ODBC 或類似 API)連接到 SQL Server。

ADO 和 OLE DB
  OLE DB 客戶端(也稱作使用者)通過客戶端提供程序與服務器以及其他后端程序進行通信。此提供程序是一組 COM 組件(一個或多個),用于將應用程序請求轉換為網絡進程間通信 (IPC) 請求。在使用 SQL Server 的情況下,最常用的 OLE DB 提供程序是 SQLOLEDB,它是 Microsoft 為 SQL Server 提供的 OLE DB 提供程序。SQLOLEDB 隨附于 SQL Server 中,并作為 Microsoft 數據訪問組件 (MDAC) 庫的一部分安裝。

  為了使用 ADO 與 SQL Server 進行通信,應用程序首先使用 Connection 對象建立與服務器的連接。ADO 的 Connection 對象接受一個連接字符串,該字符串指定要使用的 OLE DB 提供程序以及傳遞給它的參數。如果應用程序使用 SQLOLEDB 提供程序連接到 SQL Server,則該字符串中將顯示“SQLOLEDB”。

  ADO 應用程序還可以通過 ODBC 連接到 SQL Server。為此,應用程序將使用適用于 ODBC 的 OLE DB 提供程序,并指定在其連接字符串中引用目標 SQL Server 的 ODBC 數據源。這種情況下,應用程序與 OLE DB 進行通信,同時 ODBC 的 OLE DB 提供程序調用相應的 ODBC API,以便與 SQL Server 進行會話。

ADO.NET
  ADO.NET 應用程序通常使用 .NET Framework Data Provider for SQL Server 連接到 SQL Server。該本機提供程序使 ADO.NET 對象能夠與 SQL Server 直接進行通信。通常,應用程序使用 SqlConnection 對象建立連接,然后使用 SqlCommand 對象向服務器發送命令,并接收服務器返回的結果。SqlDataAdapter 和 SqlDataReader 類通常與 SqlCommand 一起使用,以便通過托管的代碼應用程序與 SQL Server 進行交互。

  通過 OleDbConnection 類,ADO.NET 應用程序還可以使用 SQLOLEDB OLE DB 提供程序與 SQL Server 進行交互。此外,它們可以通過 OdbcConnection 類使用 ODBC 訪問 SQL Server。因此,僅通過托管代碼,您就有三種不同的方法從應用程序訪問 SQL Server。從故障排除的角度而言,了解這些方法是非常有用的,因為它可以幫助您將遇到的與連接相關的問題歸結到特定的數據訪問層或庫。

客戶端 Net-Library
  該堆棧中的下一層是 Net-Library。Net-Library 在 API 或對象庫(應用程序使用它與 SQL Server 進行通信)與網絡協議(用于與網絡交換數據)之間提供了一個通道。SQL Server 為所有主要的網絡協議提供了 Net-Library。這些庫以透明方式將客戶端發出的請求發送到 SQL Server,并將服務器發出的響應返回給客戶端。可以使用 SQL Server 的客戶端網絡實用程序配置適用于特定客戶端的 Net-Library。支持的客戶端協議包括 TCP/IP、命名管道、NWLink、多協議 (RPC) 和其他一些協議。

  尤其值得一提的 Net-Library 是共享內存 Net-Library。顧名思義,該 Net-Library 使用 Windows 的共享內存功能在 SQL Server 客戶端與服務器之間進行通信。顯然,這意味著客戶端與服務器必須位于同一臺物理計算機上。

  由于它能夠繞過物理網絡堆棧,因此共享內存 Net-Library 要比其他 Net-Library 快得多。對共享內存區域的訪問受到同步對象的保護,因此客戶端與服務器之間的通信速度主要受限于 Windows 對內核對象進行調度的能力,以及進程與共享內存區域之間進行數據復制的能力。

  可以在連接時將某個時間段或(本地)指定為您的計算機名,來指示使用共享內存 Net-Library。也可以在連接時為計算機\實例名加上前綴 lpc:,來指示要使用共享內存 Net-Library。

  注意,即使連接到同一臺計算機上的 SQL Server,共享內存 Net-Library 也未必就是最佳的連接選項。在某些情況下,客戶端與服務器之間的直接連接可能限制它的擴展性。與應用程序整體體系結構中的其他元素一樣,應始終對給定技術解決方案進行全面的測試,然后才能判斷它是否有良好的擴展性以及是否比其他方法更快。

連接
  客戶端進行連接時,SQL Server 的用戶模式計劃程序 (UMS) 組件將它指定給特定的計劃程序。啟動時,SQL Server 為系統上的每個 CPU 創建一個單獨的 UMS 計劃程序。當客戶端連接到服務器時,這些客戶端將指定給具有最少連接數的計劃程序。連接后,客戶端將不會更換計劃程序 - 它將始終受到指定計劃程序的控制,直到連接斷開。

  這對與服務器建立多個連接的應用程序很重要。如果應用程序性能較差,或無法在它的多個連接上平均分配工作,則在該應用程序的某些連接之間可能造成不必要的 CPU 資源爭用,而其他連接實際上卻處于空閑狀態。

  例如,應用程序與雙處理器計算機上運行的 SQL Server 建立了四個連接,連接 1 和 3 隸屬于處理器 0,連接 2 和 4 隸屬于處理器 1。如果應用程序的大部分工作通過連接 1 和 3 執行,則這兩個連接將爭用 CPU 0,而 CPU 1 實際上可能仍處于空閑狀態。這種情況下,應用程序只能斷開某些連接或重新連接某些連接,并希望連接 1 和 3 隸屬于不同的 CPU (連接時無法指定處理器隸屬關系),或在它的連接上重新分配工作負荷,以便每個連接的工作負荷更加均衡。當然,后一種情況要遠好于前一種情況。

[page_break]連接內存
  SQL Server 為客戶端請求的每個連接保留三個數據包緩沖區。每個緩沖區的大小取決于 sp_configure 存儲過程指定的默認網絡數據包大小。如果默認網絡數據包大小小于 8 KB,則這些數據包的內存將由 SQL Server 的緩沖池提供。否則,該內存將由 SQL Server 的 MemToLeave 區域分配。

  值得一提的是,.NET Framework Data Provider for SQL Server 的默認網絡數據包大小為 8KB,因此,與托管代碼客戶端連接關聯的緩沖區通常由 SQL Server 的 MemToLeave 區域提供。而典型的 ADO 應用程序卻不同,它們的默認數據包大小為 4 KB,因此緩沖區將由 SQL Server 緩沖池分配。

事件
  連接后的客戶端請求通常分為兩種廣泛類別:語言事件和遠程過程調用。盡管還存在其他類別,但大多數由 SQL Server 客戶端發送到服務器的請求由以下兩種類型之一構成:語言事件是從客戶端發送到服務器的 一組 T-SQL。例如,如果調用 ADO Command 對象(其 CommandText 屬性設置為 T-SQL 查詢,CommandType 屬性設置為 adCmdText)的 Execute 方法,則查詢將作為語言事件提交給服務器。同樣,如果將 CommandType 設置為 adCmdTable 并調用 Execute 方法,則 ADO 將生成一個內部查詢(它將選擇 CommandText 屬性標識的表中的所有列),并將它作為語言事件提交給服務器。另一方面,如果將 CommandType 設置為 adStoredProc,則調用 Execute 將使 ADO 向服務器提交一個遠程過程調用請求,以執行 CommandText 屬性中列出的存儲過程。

  為何要關心將請求作為語言事件還是作為 RPC 提交給服務器呢?通常,這是因為 RPC 的功能更為出色,特別是在重復調用具有不同篩選值的同一查詢時。盡管 SQL Server 可以自動將普通的語言事件請求參數化,但這種能力非常有限。它從不嘗試自動將某些類型的查詢參數化。這可能會導致基本相同的查詢產生不同的執行,從而只因為這些不同的執行提供不同的值,而導致在服務器上白白浪費計劃編譯的成本。這通常不是您所希望的結果 - 您希望針對查詢的第一次執行編譯一個新的計劃,然后將該計劃重復用于具有不同參數的執行。

  而 RPC 則通過顯式參數化查詢(而不是依賴服務器參數化查詢)來支持計劃重復使用。為過程的第一次執行生成一個計劃后,隨后的執行將自動重復使用該計劃,即使它們提供的參數值不同。與通過語言事件調用存儲過程相比,使用 RPC 調用存儲過程不僅節省了計劃編譯所需的執行時間和 CPU 資源,還增強了 SQL Server 內存資源的利用率,因為它避免了冗余執行計朔訓哪詿妗?

  在執行動態 T-SQL 時,通常首選 sp_executesql 而不是 EXEC() 也出于同樣的原因。Sp_executesql 的工作方式是:使用指定的查詢創建一個存儲過程,然后使用提供的參數調用它。與 EXEC() 不同,sp_executesql 提供了一個允許您參數化動態 T-SQL 并支持計劃重復使用的機制。使用 sp_executesql 執行的動態查詢比使用 EXEC() 的查詢能夠在更大程度上避免不必要的編譯和資源消耗。

TDS
  從客戶端發送到 SQL Server 的 RPC、語言事件和其他類型的請求被格式化為稱作表格數據流 (TDS) 的 SQL Server 特定數據格式。TDS 是 SQL Server 客戶端和服務器之間使用的“語言”。對于它的確切格式將不作介紹,但是,如果客戶端要與 SQL Server 進行通信,就必須使用 TDS。

  目前,SQL Server 支持三種版本的 TDS:TDS 8.0(適用于 SQL 2000 客戶端)、TDS 7.0(適用于 SQL Server 7.0 客戶端)和 TDS 4.2(適用于 SQL Server 4.2、6.0 和 6.5 客戶端)。完全支持所有 SQL Server 2000 功能的版本只有 TDS 8.0。其他版本保持向后兼容。

服務器端 Net-Library
  在服務器端,客戶端請求最初由 SQL Server 為偵聽特定網絡協議而建立的偵聽器接收。這些偵聽器由服務器上的網絡庫以及服務器端的 Net-Library(在它們與服務器之間提供管道)構成。您可以使用 SQL Server 網絡實用程序配置服務器偵聽的協議。SQL Server 與客戶端支持同樣范圍的網絡協議(處理群集的情況除外)。對于群集化的 SQL Server,只有 TCP/IP 和命名管道可用。

  SQL Server 為偵聽客戶端請求所使用的每個網絡協議設置一個線程,并使用 Windows 的 I/O 完成端口機制等待和有效處理請求。從網絡接收到 TDS 數據包時,Net-Library 偵聽器將其重新匯編為它們的原始客戶端請求,并將這些請求傳遞到 SQL Server 的命令處理層,即開放式數據服務 (ODS)。

將結果返回到客戶端
  服務器在準備將特定客戶端請求的結果返回時,將使用最初接收請求時所用的網絡堆棧。它通過服務器端 Net-Library 將結果發送到相應的網絡協議,隨后這些結果將通過網絡以 TDS 格式返回到客戶端。

  在客戶端上,客戶端 Net-Library 將從服務器接收的 TDS 數據包從 IPC 層重新匯編,并將其繼續轉發到初始化該請求的 API 或對象庫。

小結
  盡管涉及了所有組件,但 SQL Server 客戶端與服務器之間的往返過程卻相當快 - 特別是在使用內存 Net-Library 時,亞秒響應時間非常普遍。構建和調整您自己的 SQL Server 客戶端應用程序時,以下幾個與數據相關的問題值得注意:

  如果應用程序與 SQL Server 運行在同一臺計算機上,則建議您使用共享內存 Net-Library(如果尚未使用它)。基于共享內存 Net-Library 的連接通常比其他類型的連接快很多。在注意上述內容的同時,還應:始終全面測試解決方案并將它與其他可行方案進行對比,這樣才能判斷它是否確實更好或更快。事實勝于雄辯。

  由于客戶端在第一次連接時將指定給特定的 UMS 計劃程序,并只有在斷開連接后,才會擺脫該計劃程序的控制,因此確保在應用程序與服務器建立的連接上均衡分配工作負荷非常重要。工作負荷不均衡可導致不必要的 CPU 爭用并降低資源使用率。

  在服務器上配置的默認網絡數據包大小以及客戶端在連接時指定的網絡數據包大小將直接影響它們在服務器上所需的內存量和分配內存的池。對服務器進行擴展性和速度配置時,應記住這一點。還應記住,默認情況下,ADO.NET 應用程序的網絡數據包大小比 ADO 應用程序的更大。

  通常,在向服務器發送請求時,應首選 RPC 而非語言事件。為此,應在使用的 ADO 或 ADO.NET 對象中設置相應的屬性。

  執行動態 T-SQL 時,應在可能的情況下使用 sp_executesql 代替 EXEC()。唯一例外的情況是,當使用 EXEC() 的功能將查詢片斷連接而成的動態查詢字符串的大小超過單個本地變量的存儲大小時(這種情況非常少見)。

  當遇到客戶端問題,并且懷疑它可能和連接服務器時所用的對象庫或 API 有關時,可以使用的一個故障排除技巧就是更改所用的客戶端機制,這樣可以將問題歸結為特定的組件。例如,假設您升級 MDAC 并開始在 SQL Server 錯誤日志中看到 17805 錯誤,這表明客戶端 ADO 應用程序發送的 TDS 數據包的格式不正確。您可能嘗試讓應用程序轉為使用 ODBC 的 OLE DB 提供程序,如果您可以較為容易地做到這一點,應看看該問題是否與 SQLOLEDB 提供程序有一定的關系。相反,如果基于 ADO 的應用程序一直通過 ODBC 進行連接,則可以切換到 SQLOLEDB,看看這是否能解決問題,或至少幫助您縮小問題的范圍。

  同樣,在對連接問題進行故障排除時,更改正在使用的 Net-Library 有時會有所幫助。如果使用 TCP/IP,命名管道也許值得一試。例如,如果 DHCP 服務器出現問題,并且沒有有效的 IP 地址,則您將無法使用 TCP/IP 連接到 SQL Server。通過切換到命名管道,可以快速地將問題歸結為 TCP/IP 特定的因素上。另一方面,如果在切換 Net Library 后仍存在同樣的問題,則可以排除 Net-Library 方面的問題。問題的原因可能是服務器已關閉,或在您與服務器之間的某處網絡基礎設施無法正常工作。最后,還可以容易地更改應用程序使用的 Net-Library,而不必更改應用程序本身,這樣就為您提供一個幫助縮小問題范圍的工具。盡管從長遠角度而言,使用某一特定 Net-Library 并不可行,但讓客戶端臨時使用它可以幫助您縮小連接相關問題的范圍。


全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 亚洲五月激情网| 狠狠躁狠狠躁视频专区| 网站一区二区三区| av无码久久久久久不卡网站| 狠狠热免费视频| 男人添女荫道口图片| 日韩精品aaa| 中文字幕在线导航| 1314成人网| 手机精品视频在线| 亚洲熟妇av一区二区三区| 懂色av一区二区三区四区五区| 99久久久无码国产精品6| 日本成人在线不卡| 999在线精品视频| 久久99爱视频| 三上悠亚av一区二区三区| 99爱视频在线| 国产中文字幕免费观看| 777av视频| 精品视频在线观看一区| 99在线免费视频观看| 手机看片日韩国产| 好吊色这里只有精品| 亚洲黄色av片| 九九九久久久久久久| 不用播放器的免费av| 国产三级精品三级在线| 青青草原国产在线视频| 九一精品久久久| 日本一二三区在线| 久久最新免费视频| 色爽爽爽爽爽爽爽爽| 台湾无码一区二区| 欧美这里只有精品| 男女私大尺度视频| 丰满爆乳一区二区三区| 亚洲成熟丰满熟妇高潮xxxxx| 日本xxxxxxx免费视频| 91看片在线免费观看| 午夜精品久久久久久久99热影院| 天天综合天天添夜夜添狠狠添| 日韩av一卡二卡三卡| 大片在线观看网站免费收看| 日本大片免费看| 亚洲精品无码久久久久久| 久久99爱视频| 浴室偷拍美女洗澡456在线| 国产av熟女一区二区三区| 日本日本19xxxⅹhd乱影响| 性生交免费视频| 吴梦梦av在线| 日韩少妇内射免费播放18禁裸乳| 日韩欧美在线免费观看视频| 中文字幕亚洲影院| 人人干视频在线| 黄色永久免费网站| 亚洲国产精品无码av| 人妻无码视频一区二区三区| 精品国产乱码久久久久久1区二区| 白白操在线视频| jizzzz日本| 东北少妇不带套对白| 亚欧美在线观看| 水蜜桃色314在线观看| 亚洲精品手机在线观看| 浮妇高潮喷白浆视频| 一级做a爱视频| 青青在线视频观看| av久久久久久| 性欧美在线视频| 春日野结衣av| 99在线观看视频免费| 亚洲第一中文av| 激情小视频网站| 一级一片免费播放| 亚洲欧美日韩综合网| 欧美三级一级片| 激情成人开心网| 永久免费黄色片| 日韩一级免费片| 免费日韩中文字幕| 青青草成人免费在线视频| 7777在线视频| 久久99国产精品一区| 91看片在线免费观看| 成人羞羞国产免费网站| 久久综合九色综合88i| 欧美日韩亚洲一二三| 一二三在线视频| 在线视频观看91| 日日噜噜夜夜狠狠| 毛葺葺老太做受视频| 久久久精品在线视频| 人妻少妇被粗大爽9797pw| 国产精品999视频| 免费国产黄色网址| 欧美亚洲黄色片| 九九热只有这里有精品| 精品人妻人人做人人爽| 国产在线视频在线| 久久这里只有精品18| 免费无码毛片一区二三区| 97在线国产视频| 久久久一本二本三本| 自慰无码一区二区三区| 人妻熟女一二三区夜夜爱| www.日日操| 九九九九九国产| 国产成年人在线观看| 日韩欧美一级在线| 日韩欧美一区二| av网站在线不卡| 日本男人操女人| 羞羞的视频在线| 日本中文字幕高清| 91日韩视频在线观看| 妞干网在线免费视频| 污视频网址在线观看| 亚洲国产精品女人| 免费看一级大黄情大片| 精品www久久久久奶水| 日本中文字幕影院| 天堂а√在线中文在线| 成人三级视频在线播放| 在线黄色免费看| 成年人视频观看| 三上悠亚在线一区| 妞干网视频在线观看| 成人免费毛片播放| 日韩中文字幕亚洲精品欧美| 亚洲熟妇av日韩熟妇在线| wwwwwxxxx日本| 日韩欧美视频网站| 五月激情五月婷婷| 一女被多男玩喷潮视频| 久久久久久久久久毛片| 欧美女人性生活视频| 国产高潮呻吟久久久| 成熟老妇女视频| 国产毛片久久久久久国产毛片| 嫩草av久久伊人妇女超级a| 日本免费成人网| 成年人网站av| 久久九九国产视频| 国产精品久久..4399| 在线成人免费av| 久久人人爽av| 99精品视频播放| 5月婷婷6月丁香| 国产欧美日韩小视频| 欧美a级黄色大片| 交换做爰国语对白| 日韩不卡一二三| 美女黄色片视频| 男人透女人免费视频| 欧美日韩在线视频一区二区三区| 国产亚洲精品久久久久久久| 一二三av在线| 国产一级片自拍| 爆乳熟妇一区二区三区霸乳| 男人日女人bb视频| 香港三级韩国三级日本三级| 丝袜人妻一区二区三区| 日韩a级黄色片| 人妻激情另类乱人伦人妻| 中文字幕第50页| 成人一区二区av| 看一级黄色录像| 潘金莲一级淫片aaaaaa播放1| 亚洲自拍第三页| 小说区视频区图片区| 强开小嫩苞一区二区三区网站 | 18岁视频在线观看| 欧美一级片中文字幕| 日本精品免费在线观看| 欧美亚洲另类色图| 日本www高清视频| 欧美女同在线观看| 手机精品视频在线| 粉嫩av一区二区三区天美传媒 | 久久天天东北熟女毛茸茸| 日本a级片在线观看| 真实国产乱子伦对白视频| 亚洲熟妇无码一区二区三区| 97xxxxx| 中国黄色片免费看| 国产传媒免费观看| av片在线免费| 亚洲熟女乱色一区二区三区| 少妇高清精品毛片在线视频| 亚洲人视频在线| www.一区二区.com| 国产精品视频一区二区三区四区五区| www黄色av| 蜜臀在线免费观看| 成人精品视频一区二区| 国产三级精品三级在线| 久久久亚洲精品无码| 超碰在线公开97|