首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 SQL-DMO 程式化控制 SQL Server 服務與物件

     編輯:關於SqlServer

SQL-DMO (SQL Distributed Management Objects) 為 SQL Server 7.0/2000 提供的 COM 介面,允許外部程式(C++、VB、C# 透過 Interop)管理伺服器、資料庫、作業、備份等。本文示範以 C++ #import 方式啟動 SQL Server 服務的核心流程。

環境準備

  1. 尋找 sqldmo.dll(通常在 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\)。
  2. 專案加入 #import "sqldmo.dll" no_namespace,產生 .tlh/.tli。

核心啟動邏輯(C++ 範例)

BOOL StartSQLServer()
{
    if (FAILED(CoInitialize(NULL))) return FALSE;

    _SQLServerPtr spSQLServer;
    if (FAILED(spSQLServer.CreateInstance(__uuidof(SQLServer)))) return FALSE;

    try {
        // 設定連線參數(僅為測試服務是否已啟動)
        spSQLServer->PutLoginTimeout(10);
        spSQLServer->PutApplicationName(_T("MyApp"));
        spSQLServer->PutHostName(_T("MyHost"));
        spSQLServer->PutNetPacketSize(1024);

        _bstr_t server(_T("(local)")), user(_T("sa")), pwd(_T(""));
        spSQLServer->Connect(server, user, pwd); // 若服務已啟動,連線成功
    }
    catch (_com_error&) {
        // 連線失敗 → 服務未啟動 → 嘗試啟動
        try {
            _bstr_t server(_T("(local)")), user(_T("sa")), pwd(_T(""));
            spSQLServer->Start(FALSE, server, user, pwd); // TRUE=MSSQLServer 服務名
        }
        catch (_com_error& e) {
            AfxMessageBox(e.Description());
            spSQLServer.Release();
            CoUninitialize();
            return FALSE;
        }
    }

    spSQLServer.Release();
    CoUninitialize();
    return TRUE;
}

關鍵點解析

  • 先 Connect 再 Start:Connect 僅探測服務狀態;若拋出例外才呼叫 Start,避免重複啟動錯誤。
  • 參數說明:Start(bAutoStart, server, user, pwd),bAutoStart=FALSE 表示手動啟動。
  • 錯誤處理:所有 COM 呼叫皆以 try/catch(_com_error) 包裹,釋放介面前檢查 HRESULT。

延伸應用

同樣介面可執行:資料庫 Attach/Detach、備份/還原、建立作業/警示、管理登入/權限、全文檢索設定等。SQL Server 2005 起改用 SMO (SQL Management Objects) 取代 SQL-DMO,新專案請改用 SMO。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved