通常
您不會將 Pi 計算到小數點後第 n 位
或是沒事訓練神經網絡
您是在訪問一個數據庫
對它進行查詢和更新
並且在訪問數據庫方面遇到麻煩
對數據訪問技術的正確使用
加上對後端數據庫的了解
對保持高性能和持續可擴展性需求很關鍵
下面是可能想從業務層考慮的一些問題
使用最新版本的 Microsoft 數據訪問組件
Windows
附帶了
Microsoft 數據訪問組件 (MDAC)
該 MDAC 版本包括了改進和增加的功能
例如不需要創建文件的 XML 集成
URL 資源支持和層次結構命名空間導航
MDAC
也可用於運行 Windows NT
和 Windows
x 的計算機
參見下面的鏈接可以獲得更詳細的信息
並可下載
MDAC 包括 MS ODBC 和 OLE DB 組件
請使用 MDAC 軟件包中附帶的最新版本組件
不要混合和匹配 ODBC 及 OLE DB 組件來創建
新口味
MDAC 解決方案經過測試
並通過離散的 DLL 包進行部署
下面的關鍵詞已經過測試
其他配置很有可能偶爾使用
參考
從 /data/ 可獲得最新的 MDAC 版本和信息
盡快將 ADO 對象關閉並設置為 Nothing
在使用 ADO 對象時
請確保在用完後立即顯式調用 Close 方法並將使用的記錄集和連接設置為 Nothing
一種最常見的 ADO 編碼錯誤
是在用完對象後忘記關閉
雖然顯式關閉對象不是強制的
但是這麼做可能是成功或失敗的應用程序之間的差別
將 ADO 對象設置為 Nothing 會清除存儲在 Err 中的錯誤信息
如果清除了錯誤處理程序中的 ADO 對象
可能會帶來問題
因此
如果希望存儲該信息
請在關閉對象之前的 ADO 對象清除過程中
將 Number
Source 和 Description 存入變量
注意 如果要返回斷開連接的記錄集
則不應該關閉記錄集
關閉記錄集則會取消它的內部高速緩存
因此只要將它的 ActiveConnection 設置為 Nothing 就可以了
操作方式
要確認是否正確關閉了 Connection 或 Recordset 對象
可以實現下面的代碼
If Not oMyRecordset Is Nothing Then
If oMyRecordset
State <>
Then oMyRecordset
Close
Set oMyRecordset = Nothing
End If
正如以前所提到的
不能在將返回給客戶機的記錄集中調用 Close 方法
避免復用 ADO 連接對象來執行多個命令
避免在多個數據庫命令上復用打開連接對象
也就是說
每當需要時請打開
使用和關閉連接
在數據庫訪問對象中封裝 ADO 代碼是不會有問題的
原因是這些封裝是在無狀態方式下執行的
但是
如果對象中有 ADO 對象
尤其是在類級別上存儲了 ADO 連接
那麼請參考下面的
知識庫
文章
主要問題在於如何在執行其他任務時保持打開的數據庫游標
如果正在檢索要發送到客戶機的記錄集
那麼請從 RDBMS 斷開它們的連接
實現一種復用 ADO 連接對象的方式會大大加重維護任務
並且可能導致通過良好封裝能夠避免的設計錯誤
ADO
OLE DB 層實現了它自己的內部連接池
該連接池使下面的流程成為訪問服務器上數據的首選方式
創建 ADO 連接
打開連接
使用它
關閉連接
將 ADO 連接對象設為 Nothing
開發和維護將更方便
並且更快速和可擴展
使用 OLE DB 提供程序而不是 ODBC 驅動程序
在通過 ADO 使用 OLE DB 時
可以選擇使用本機 OLE DB 提供程序
或者選擇能夠轉換並將所有調用轉發給 ODBC 驅動程序的指定的 OLE DB 提供程序(MSDASQL — 即
OLE DB Provider for ODBC Drivers
)
如果有的話
可以使用能夠與數據庫進行本機對話的 OLE DB 提供程序
以便獲得更高的性能
更多功能
轉發兼容性以及參與活躍的 OLE DB 第三方解決方案市場
操作方式
如果下面的任何條件為真
就說明正在使用 ODBC
您在 ODBC 管理單元中配置
系統
用戶
或
文件 DSN
以便使用某個應用程序
您的連接字符串中包括
MSDASQL
或
DSN
沒有在連接字符串中指定提供程序
如果使用的是 ODBC
請確定本機提供程序是否訪問有相同功能支持的同一數據庫
要查看的關鍵部位是
連接池
分布式事務支持等等
參考
MDAC 伙伴領域
目前市場上的 OLE DB 產品(英文)
針對 ODBC 編程人員的 OLE DB(英文)
Merant Corporation(英文)
使用通用數據鏈接 (UDL) 文件來保存連接字符串
使用 UDL 文件存儲數據庫連接的方式和使用
ODBC 數據源名稱 (DSN)
非常相似
UDL 文件存儲 OLE DB 連接信息
例如提供程序
用戶名
密碼和其他選項
用存儲在該 UDL 文件中的信息可以打開 ADO 連接
從而允許管理員在需要的情況下更改它
並且避免了打開注冊表或者使用 ODBC
確保軟件包身份有權讀取該文件
並且恰當的管理員有權讀寫該文件(實際上是編輯它)
如果是 Web 站點的情況
請確保 DLL 和 UDL 文件不在虛擬目錄中
否則就可以通過 Web 直接訪問和下載它們了
要創建 UDL 文件
請創建一個空文件並用 UDL 擴展名命名它
通過雙擊該文件輸入所有信息
然後在它的屬性表中輸入信息
如下面所示
要用 UDL 打開 ADO 連接
請用以下語法
oOConnection
Open
FILE Name=C:\SecureStuff\MyDataLink
UDL
您可以要求管理員將 DLL 和 UDL 都放在同一安全目錄中
在這種情況下必須對完整的 UDL 文件路徑進行硬編碼
如圖
所示
您必須需要設置
允許
保存存儲完整連接字符串的密碼
系統會發出警告
指出您正以純文本方式將密碼存儲在文件中
如果對此文件設置了正確的 NTFS 權限
這不會成為問題
不要將 UDL 文件放在文件共享區中
以避免其他服務器都能打開它
如果有許多服務器
請在每個服務器上保存一個 UDL 文件的副本
圖
設置
允許
保存密碼
性能可能是倍受關心的問題
畢竟這是對磁盤的訪問
對嗎?實際上在使用該技術時
文件系統將在內存中緩存該文件
而且強度測試表明
如果完全可以度量的話
在比較它訪問
系統
或訪問
文件 DSN
時
性能的下降是可以忽略的
使用存儲過程而不是動態 SQL 字符串
使用存儲過程有許多優點
包括
通過將概念數據命令與命令的實現隔離
添加來自數據庫架構的抽象級別
存儲過程還使應用程序代碼減少耦合
使測試更方便
提供更好的代碼分布
與構造
發送和分析 SQL 字符串
加上上面的所有工作相比
包裝參數和返回結果集的邏輯要更少
由於它們的執行計劃是預編譯的
因此在運行時會更有效
動態 SQL 串必須包括能夠使它們的查詢計劃優化緩存的參數
允許更多的運行時靈活性 — 一旦被部署後
要更改在 DLL 中編譯的 SQL 串
比更改存儲過程更難
由於它們的參數已經聲明了方向和類型
因此允許更好的工程代碼
允許更好的安全配置
使存儲過程限制在不同的應用程序/軟件包標識或者限制在不同服務器應用程序上的不同連接串
通常是更容易維護些
如果您已經用了存儲過程
那麼在需要改變時完成的速度會更快
操作方式
添加存儲過程是很方便的
只要查看 T
SQL 中的 CREATE PROCEDURE 語句
並按那些准則做就可以了
如果在數據訪問對象的實現中選擇使用存儲過程
那麼為了維護起見
請保持它們的一致性
請把它們作為一個整體使用或者完全不用
這有助於排除故障
有助於為今後的開發而構造的功能
不必預言動態 SQL 和存儲過程的混合
使用存儲過程的 OUTPUT 參數以獲得單行返回值
在從數據庫查詢中返回單項數據或者單行時
請使用 OUTPUT 參數而不是結果
OUTPUT 參數不使用在服務器上構造的任何游標/結果集
並且使組件和數據庫之間能進行更有效的數據傳輸
但是
根據體系結構的不同
您可能不希望單行或多行查詢有不同的代碼路徑
必須同時考慮數據庫架構的動態性
有了更強大的類型化存儲過程後
它們就會更緊密地耦合到您的數據庫
和其他情況一樣
靈活性和性能是密切相關的
不要在單元之間傳送 ADODB
Connection 對象
在數據庫連接的交叉單元/進程匯集上需要注意一些問題
我們建議您不要這麼做
匯集和數據庫驅動程序的局限性
可能會引起一些意想不到的行為
如果這麼做
那麼可能需要自己管理連接池並且實現自己的連接分配程序
在大多數情況下
自己提供池功能可能太困難了
通常情況下
即使是最嚴格的資源管理器
也會允許在同一單元上發生的不同活動上有不同的連接
如果 ODBC 驅動程序或者 OLE DB 提供程序允許池(通常是這樣的)
那麼請關閉連接再在需要的時候打開它們
並且允許 OLE DB/ODBC 層提供基本結構
如果使用交叉單元/進程匯集的原因是為了提供正確的連接串
那麼請按前面討論的方式
在 SPM 中存儲字符串
然後按我們建議的方式重新在每個方法調用中創建連接
記住 ACID 規則
請記住事務操作的規則
它通常
From:http://tw.wingwit.com/Article/os/xtgl/201311/9438.html