SQL-DMO (SQL Distributed Management Objects) 為 SQL Server 7.0/2000 提供的 COM 介面,允許外部程式(C++、VB、C# 透過 Interop)管理伺服器、資料庫、作業、備份等。本文示範以 C++ #import 方式啟動 SQL Server 服務的核心流程。
sqldmo.dll(通常在 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\)。#import "sqldmo.dll" no_namespace,產生 .tlh/.tli。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,避免重複啟動錯誤。Start(bAutoStart, server, user, pwd),bAutoStart=FALSE 表示手動啟動。try/catch(_com_error) 包裹,釋放介面前檢查 HRESULT。同樣介面可執行:資料庫 Attach/Detach、備份/還原、建立作業/警示、管理登入/權限、全文檢索設定等。SQL Server 2005 起改用 SMO (SQL Management Objects) 取代 SQL-DMO,新專案請改用 SMO。