微軟為外部程式的MS SQL Server服務訪問提供了功能強大的COM介面,通過這些介面,可以不費吹灰之力就可以方便的訪問SQL的服務。
第一步:在MS SQL Server的安裝目錄下面找到在sqldmo.rll檔案,然後
#import "sqldmo.rll" no_namespace
這樣就生產了sqldmo.tlh和sqldmo.tli檔案,裡麵包含了SQL的COM介面的定義和實現。
第二步:就是具體的實現了。
先來一個啟動SQL Server服務
BOOL StartSQLServer()
{
//先初始化COM
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Com初始化錯誤!");
return FALSE;
}
//定義一個SQL Server的對象指標
_SQLServerPtr spSQLServer;
//標準方法,建立執行個體
if (FAILED(spSQLServer.CreateInstance(__uuidof(SQLServer))))
{
AfxMessageBox("無法建立SQL對象!");
return FALSE;
}
try
{
//這裡設定串連SQL的一些參數
//簡單。設定Login逾時
spSQLServer->PutLoginTimeout(10);
//隨便起個名字好啦,管不著我啦
spSQLServer->PutApplicationName("MyAppName");
spSQLServer->PutHostName("MyHostName");
//網路資料Packet的大小
spSQLServer->PutNetPacketSize(1024);
/*
該建立串連了,為什麼呢??服務還沒有啟動啊?怎麼串連呢?不是傻了嗎?道理跟你慢慢跟你說啦:這是試探一下SQL Server是不是已經啟動了,如果它已經啟動,那麼我們就不用再次啟動了(再次啟動也是錯誤:伺服器的執行個體已經運行中),呵呵,已經啟動了,幹嗎還要我寫代碼啟動它啊?所以,如果SQL Server如果沒有啟動(當然其他原因也會觸發異常),下面的異常處理代碼就會執行到,我們將在異常處理中執行啟動
*/
CString strServer(”(Local)”);/*串連啟動的SQL 的伺服器名(這裡是本地SQL Server 服務,記住將本地的SQL Server服務停掉,然後測試啊)*/
Cstring strUserName(“sa”); //串連啟動的使用者名稱,也可以使用信任連接,不用提供使用者名稱和密碼,請參考MSDN
Cstring strPassword(””);//就是密碼啦 spSQLServer->Connect(_variant_t(strServer),_variant_t(strUserName),_variant_t());
}
catch(_com_error pCE)
{
//串連錯誤啦,是伺服器沒有啟動吧
try
{
//真正啟動SQL Server的代碼在這裡 spSQLServer->Start(FALSE,_variant_t(strServer),_variant_t(strUserName),_variant_t(strPassword)); }
catch(_com_error pCE)
{
//這次的異常處理倒沒有執行什麼操作啊,隨便處理一下,返回一個錯誤資訊啦。
AfxMessageBox(pCE.Description());
spSQLServer.Release();
return FALSE;
}
}
//接下來是釋放資源啦,try catch是不是用成習慣了,這樣也要??反正是沒有錯的,多用一下也好啦。
try
{
spSQLServer.Release();
spSQLServer.Release();
}
catch(_com_error pCE)
{
AfxMessageBox(pCE.Description());
return FALSE;
}
//釋放COM
CoUninitialize();
return TRUE;
}
通過#import "sqldmo.rll"還能獲得其他的很多介面,比如Attach資料庫、FullTextService、獲得設定SQL Server伺服器的屬性等等,當然相對應的停止SQL服務我就不用說了吧。