用ADO管理SQL Server資料庫及其裝置 (轉)
現 存 問 題
---- 我 們 知 道, 在 使 用CREATE DATABASE 語 句 創 建 一 個 數 據 庫 之 前, 必 須 存 在 一 個 有 剩 餘 空 間 的 數 據 庫 設 備, 或 者 事 先 使 用DISK INIT 語 句 創 建 一 個 新 設 備。 但 是 這 些 語 句 含 有 很 多 必 需 的 參 數, 而 且 如 果 不 使 用SQL Server 的 管 理 工 具, 很 多 參 數 值 往 往 難 以 確 定。---- 以 創 建 數 據 庫 設 備 的DISK INIT 語 句 為 例, 這 個 語 句 的 完 整 語 法 如 下:
DISK INIT NAME = ‘logical_name', PHYSNAME = ‘physical_name', VDEVNO = virtual_device_number, SIZE = number_of_2K_blocks [, VSTART = virtual_address]
---- 其 中NAME 和SIZE 這 兩 個 參 數 都 很 容 易 得 到, 麻 煩 的 是 物 理 名PHYSNAME 和 虛 擬 設 備 號VDEVNO 這 兩 個 參 數。 前 者 要 求 是 一 個 服 務 器 上 的 物 理 文 件 全 路 徑 名; 後 者 要 求 在1 ~255 之 間 找 一 個 沒 有 被 別 的 設 備 佔 用 的 號 碼。 而 在 編 寫 數 據 庫 管 理 程 序 時, 用 戶 的 服 務 器 上 有 哪 些 設 備 號 已 經 被 佔 用,SQL Server 裝 在 哪 個 驅 動 器 上, 都 是 無 法 預 料 的。
---- 雖 然, 使 用SQL Server 的 管 理 工 具SQL Enterprise Manager, 可 以 非 常 方 便 地 創 建、 刪 除 數 據 庫 設 備, 或 者 擴 大 一 個 已 經 存 在 的 數 據 庫, 也 可 以 非 常 方 便 地 創 建、 刪 除 或 者 修 改 一 個 數 據 庫, 但 是, 這 個 工 具 仍 然 要 求 我 們 輸 入 很 多 不 太 常 用 的 參 數, 界 面 稍 顯 復 雜。
---- 所 以, 理 想 的 情 況 是: 用 戶 只 需 要 按 下 一 個 命 令 按 鈕, 應 用 程 序 需 要 的 數 據 庫 及 其 設 備 都 能 立 即 自 動 地 創 建 好。
解 決 方 案
---- 為 了 實 現 這 樣 的 目 標, 我 們 必 須 想 辦 法 解 決SQL 語 句 中 的 參 數 設 置 問 題。---- 1 . 創 建 設 備 的 語 句 參 數
---- 創 建 設 備 的 語 句 即 前 面 提 到 的DISK INIT 語 句。
---- 為 了 簡 化 問 題, 我 們 可 以 指 定 與 數 據 庫 名 相 同 的 設 備 文 件 名, 並 將 設 備 文 件 保 存 在master 設 備 所 在 的 子 目 錄 中。 數 據 庫 名 是 在 設 計 應 用 程 序 時 已 經 確 定; 而master 設 備 所 在 的 子 目 錄, 可 以 從 系 統 表sysdevices 中 查 詢 得 到。 這 樣, 設 備 文 件 的 物 理 名 參 數 就 確 定 下 來 了。
---- 虛 擬 設 備 號 的 問 題 則 比 較 復 雜, 因 為sysdevices 系 統 表 中 沒 有“ 虛 擬 設 備 號” 這 樣 一 個 字 段, 因 此, 必 須 另 想 辦 法。
---- 對SQL Server 的 系 統 存 儲 過 程sp_helpdevice 進 行 分 析 之 後, 我 們 發 現, 虛 擬 設 備 號 是“ 隱 藏” 在sysdevices 系 統 表 的low 字 段 中 的, 借 助 另 一 個 系 統 表spt_values, 可 以 找 到 每 個 設 備 的 虛 擬 設 備 號。 這 樣, 我 們 只 需 要 在 一 個 循 環 中 找 一 下 某 個 設 備 號 是 否 存 在 於sysdevices 中, 就 可 以 確 定 我 們 現 在 可 用 的 虛 擬 設 備 號。
---- 至 於 數 據 庫 設 備 的 大 小, 我 們 不 妨 設 得 大 一 些, 或 者 讓 用 戶 指 定 一 下 也 可 以。
---- 2 . 創 建 數 據 庫 的 語 句 參 數
---- 創 建 數 據 庫 的 語 句 如 下:
CREATE DATABASE database_name [ON {DEFAULT | database_device} [= size] [, database_device [= size]]...] [LOG ON database_device [= size] [, database_device [= size]]...] [FOR LOAD]
---- 其 中, 大 部 分 參 數 都 是 可 選 的, 我 們 只 需 要 指 定 一 個 設 備 名 及 數 據 庫 的 大 小 即 可, 而 數 據 庫 名、 設 備 名、 大 小 在 創 建 設 備 的 時 候 已 經 確 定 好 了, 所 以, 這 個 語 句 的 參 數 不 存 在 問 題。
具 體 實 現
---- 使 用 普 通 的 應 用 開 發 工 具, 我 們 就 可 以 實 現 一 個 定 制 的 數 據 庫 管 理 程 序。---- 為 了 實 現 與 數 據 庫 服 務 器 的 連 接, 我 們 必 須 選 擇 一 種 數 據 庫 訪 問 接 口。 雖 然 從訪 問SQL Server 有 很 多 接 口 可 供 選 擇, 但 微 軟 最 新 的 數 據 庫 訪 問 接 口ADO(Active Data s) 無 疑 是 最 有 前 途 的, 因 為 它 為 基 於 瀏 覽 器 的 數 據 庫 應 用 系 統 的 實 現 提 供 了 可 能 性。
---- 以 下 是 一 些 用 於 數 據 庫 及 其 設 備 管 理 的 常 用 函 數。
---- 1 . 取 當 前 的 工 作 數 據 庫
---- 由 於 管 理 任 務 一 般 都 必 須 在master 庫 中 完 成, 因 此, 在 執 行 管 理 任 務 之 前, 最 好 保 存 當 前 工 作 庫, 以 便 完 成 任 務 之 後 再 切 換 回 去。
Public Function SQLGetCurrentDatabaseName(Cn As ADO.Connection) As String Dim sSQL As String Dim RS As New ADODB.Recordset On Error GoTo errSQLGetCurrentDatabaseName sSQL = “ CurrentDB = DB_NAME()" RS.Open sSQL, Cn SQLGetCurrentDatabaseName = Trim $(RS!CurrentDB) RS.Close Exit Function errSQLGetCurrentDatabaseName: SQLGetCurrentDatabaseName = “" End Function
---- 2 . 判 斷 一 個 數 據 庫 設 備 是 否 存 在
---- Public Function SQLExistDeviceName(Cn As ADODB.Connection, sDevName As String) As Boolean
---- '--按 照 名 稱 判 斷 一 個 設 備 是 否 存 在, 如 果 存 在, 返 回1, 否 則 返 回0
Dim sSQL As String Dim RS As New ADODB.Recordset Dim bTmp As Boolean On Error GoTo errSQLExistDeviceName sSQL = “select CntDev=count( *) from master.dbo.sysdevices where name =
‘“ & sDevName & ”'" RS.Open sSQL, Cn If RS!CntDev = 0 Then bTmp = False Else bTmp = True RS.Close SQLExistDeviceName = bTmp Exit Function errSQLExistDeviceName: SQLExistDeviceName = False End Function
---- 3 . 判 斷 一 個 虛 擬 設 備 號 是 否 被 佔 用:SQLExistDeviceNumber。
---- 編 者 注: 函 數 源 代 碼 發 表 在 本 報 的WWW 站 點 上, 地 址 是:。 下 同。 歡 迎 訪 問!
---- 4 . 找 一 個 最 小 的 尚 未 被 佔 用 的 虛 擬 設 備 號:SQLGetUnusedDeviceNumber。
---- 5 . 取 得SQL Server 安 裝 目 錄 下 的DATA 子 目 錄 路 徑:SQLGetDataPath。
---- 6 . 創 建 一 個 新 設 備:SQLCreateDevice。
---- 7 . 創 建 一 個 新 的 數 據 庫:SQLCreateDatabase65。
---- 8 . 取 數 據 庫 設 備 的 詳 細 信 息:SQLGetDeviceInfo。
---- 9 . 擴 大 數 據 庫 設 備 的 尺 寸:SQLExpandDevice。
---- 數 據 庫 應 用 系 統 在 運 行 一 段 之 後, 數 據 量 的 增 大 往 往 要 求 數 據 庫 增 大, 進 而 要 求 擴 大 設 備 尺 寸。 可 惜DISK RESIZE 語 句 要 求 的 尺 寸 參 數 為 擴 大 後 的 新 尺 寸, 而 非 需 要 增 加 的 尺 寸。 所 以, 必 須 事 先 查 到 設 備 的 原 有 尺 寸, 才 能 使 用DISK RESIZE 語 句。
---- 10 . 判 斷 一 個 數 據 庫 是 否 存 在:SQLExistDatabase。
---- 11 . 刪 除 一 個 數 據 庫:SQLDropDatabase。
---- 12 . 刪 除 一 個 數 據 庫 設 備:SQLDropDevice。
---- 13 . 取SQL Server 的 版 本 信 息:SQLGetVersionString。
---- 在 即 將 發 行 的SQL Server 7.0 中, 不 再 有 數 據 庫 設 備 的 概 念, 創 建 數 據 庫 也 將 變 得 更 加 簡 單。 在 創 建 特 定 的 用 戶 數 據 庫 時, 為 了 區 分 不 同 的 版 本 進 行 不 同 的 操 作, 取 得SQL Server 的 版 本 是 非 常 重 要 的。
---- “ 用 開 發 分 布 式 應 用” 系 列 文 章( 之 九), 讀 者 有 何 意 見 或 建 議, 請 發E ? 至:ms_visualstudio@.com。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 管理SQL Server資料庫安全SQLServer資料庫
- 資料庫原理及其應用(SQL server2012)習題詳解-習題7資料庫SQLServer
- 資料庫原理及其應用(SQL server2012)習題詳解-習題8資料庫SQLServer
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- SQL Server資料庫巡檢SQLServer資料庫
- sql server 2005資料庫快照SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- sql server2016叢集資料庫解除安裝SQLServer資料庫
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- MS SQL Server資料庫事務鎖機制分析(轉)SQLServer資料庫
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server 跨資料庫查詢SQLServer資料庫
- 資料庫映象 (SQL Server)操作模式資料庫SQLServer模式
- 如何做好SQL Server資料庫安裝規劃OMSQLServer資料庫
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- DataGear 變更部署資料庫為SQL Server填坑指南(含轉寫後的SQL server程式碼及SQL server配置檔案)資料庫SQLServer
- SQL Server 資料庫基本記錄(一)SQLServer資料庫
- 資料庫監視器(SQL Server Profilter)資料庫SQLServerFilter
- SQL Server DACPAC資料庫部署錯誤SQLServer資料庫
- SQL Server統計資料庫中表大小SQLServer資料庫
- SQL Server 資料庫基本記錄(二)SQLServer資料庫
- SQL Server 資料庫基本記錄(三)SQLServer資料庫
- c#連線SQL Server資料庫C#SQLServer資料庫
- sql server 資料型別轉換函式SQLServer資料型別函式
- 用OMF來簡化資料庫管理(轉)資料庫
- 還原sql server 2000資料庫的坑,不同版本資料庫SQLServer資料庫
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- SQL資料庫備份管理SQL資料庫
- Sql Server2014資料庫清理日誌SQLServer資料庫
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 通過SQL Server資料庫映象保護虛擬資料庫ICSQLServer資料庫