VC中如何使用ADO

1。首先,我們必須建立一個VC的工程。建立VC工程很簡單,只要如下操作即可。
   1. 運行VC,菜單->File->New->Projects,然後選擇MFC AppWizard(exe),然後填好工程名稱,點擊OK。
   2. 選擇應用程序類型爲Dialog based。
   3. 點擊Finish,完成。
2。導入ADO。在VC環境下,一般來說,我們都是用的ADO來連接數據庫的。
   在StdAfx.h(這是一個VC的全局頭文件,默認每個CPP文件都要引用它),添加如下代碼:
   #import "c:program filescommon filessystemadomsado15.dll" no_namespace
         rename ("EOF", "adoEOF")
         rename ("BOF", "adoBOF") 
   請確認在你的系統中存在msado15.dll這個DLL,它的位置應該與上面的路徑一直,它是ADO的庫文件。
   如果編譯不過,而且提示是一些如error C2011: 'LockTypeEnum' : 'enum' type redefinition的重定義,那麼請刪除以下的代碼:
   #ifndef _AFX_NO_DAO_SUPPORT
   #include <afxdao.h>    // MFC DAO database classes
   #endif // _AFX_NO_DAO_SUPPORT
3。初始化ADO。
   ::CoInitialize(NULL); // 初始化COM,ADO是一個COM組件。
   _ConnectionPtr opConn; // 連接
   opConn.CreateInstance(__uuidof(Connection)); // 初始化一個連接
   CString strConnect; // 格式化連接
   strConnect.Format("Provider=MSDASQL.1;Driver={%s};Server=%s;DataBase=%s;UID=%s;PWD=%s;", 
      strDriver, 
      strServerPath, 
      strDb, 
      strUid, 
      strPwd); 
    opConn->Open(_bstr_t(lpczConn), "", "", adConnectUnspecified); // 打開連接

    // 幹活,現在可以使用ADO中的其他對象了,比如_RecordsetPtr等
    _RecordsetPtr opSet;
    CString strSQL;
    // tb_idealsoft
    //    +---------------+---------------+
    //     Numb(int)   | Name(varchar) |
    //    +---------------+---------------+
    strSQL.Format("SELECT * FROM tb_idealsoft");
    _variant_t vtConn = _variant_t(opConn, true);
    opSet->PutCursorLocation(adUseClient); // 設定遊標
    opSet->Open(_variant_t((LPCTSTR)strSQL), vtConn, adOpenStatic, adLockOptimistic, adCmdText); // 執行SQL語句,打開記錄集
    long lCount = opSet->GetRecordCount(); // 表中記錄的數目
    opSet->MoveFirst(); // 到記錄集的第一行
    for(int i = 0; i < lCount; i++)
    {
        _variant_t vt = _m_opSet->GetCollect(_variant_t(_T("Name")));
        // 由於Name這個域是字符串,所以需要將vt轉化成字符串
        // 在此,我們有必要解釋一下_variant_t這個怪物,它的確是個怪物。微軟,就是一個恐龍園,
        // 經常會放出一些莫名其妙的數據結構。
        // 其實_variant_t與其說是一個class,還不如說它是一個union,其實在它的基類tagVARIANT中,的確
        // 存儲了一個union,用來存放數據,而_variant_t其實就是對這個union的進一步封裝。
        // 之前,微軟似乎試圖用它來統一所有變量的存儲與訪問,但始終不很成功,主要是這個東西實在是
        // 太抽象了,但是ADO的成功推廣卻意外的使這個畜生逐漸成名。當然,主要還是令人厭惡。
        // 在_variant_t中有一個變量叫做vt,它是用來記錄變量類型的,根據變量的類型,我們可以把_variant_t
        // 轉化成不同的數據類型。
        // _variant_t v;
        // 比如當前vt = VT_I1(說明此時_variant_t代表了一個char型數據,具體的定義可以參看oaidl.h),我們可以
        // 這樣來轉換:char ch = v.cVal;
        // 如果當前的vt = VT_LPSTR,表明當前的_variant_t代表了一個char*型數據。
        // 從而我們可以這樣轉換:char* psz = v.pcVal;
        // ……
        // 好了,現在可以將這個vt轉換爲char*然後將它保存起來了
        // ……
        opSet->MoveNext();
    }
    // 完事了,打掃戰場
    opSet->Close();

    // 現在插入一條數據,我們使用_ConnectionPtr的Execute接口
    // int nNumb = 12;
    // CString strName("南京");
    strSQL.Format("INSERT INTO tb_idealsoft(Numb, Name) VALUES(%d, '%s')", nNumb, strName); // 注意字符串型變量要用單引號括起來
    // _variant_t vtEffe
    opConn->Execute(_bstr_t(strSQL), &vtEffe, adCmdText);
    long nEffe = vtEffe.lVal; // 被影響的行數
    // ……

    // 關閉,釋放資源 
    opConn->Close(); 
    ::CoUninitialize();

-------- Access數據庫的連接字符串格式 --------------------------------------
CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin; Data Source=") + strDbPath + _T(";");
if( BARE != strPsw )
{
    strConnect += _T("Jet OLEDB:Database Password=") + strPsw;
}

轉自:

http://hi.baidu.com/idealsoft/blog/item/d8152d03ba5773703812bb0d.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章