visual c++與sql server 2000資料庫進行ADO後台連結的操作

來源:互聯網
上載者:User
要做上位了,今天嘗試下用VC6.0在後台連結SQL 資料庫,參考了《Visual C++資料庫通用模組開發與系統移植》的第一章內容,下面簡單說下步驟:

1.建立一個MFC基於對話方塊的程式,工程名為data.

2.開啟SQL SERVER,建立一個data1的資料庫。

3.在stdafx.h檔案中最後輸入:#import "c:\program files\common files\system\ado\msadO15.dll" no_namespace rename("EOF","adoEOF")

   注意不要有分號

4.在自動產生的CdataApp類源檔案中,即在data.cpp源檔案的前面,定義兩個全域變數:

#endif    _ConnectionPtr m_pConnection; //添加在此處,記住啊_RecordsetPtr m_pRecordset;

書上說的是在產生的應用程式的標頭檔中定義,可是我試過,在data.h中定義的時候,在CdataDlg類訪問這兩個變數時會出錯,所以我就改在data.cpp的前面定義了,然後在CdataDlg.cpp 源檔案的前面 用extern聲明下就可以了使用了。

5.在data.cpp的初始化函數中添加COM初始化代碼:

BOOL CDataApp::InitInstance(){    if(!AfxOleInit()){AfxMessageBox("OLE初始化出錯!");        return FALSE;}AfxEnableControlContainer();    //初始化COM對象CoInitialize(NULL);
         ......
之後接著上面,添加如下代碼,試著建立一個名為學生資訊的表:
        try{m_pConnection.CreateInstance("ADODB.Connection");//"ADODB.Connection"  _uuidof(Connection)m_pRecordset.CreateInstance("ADODB.Recordset");//定義資料庫連接字串,m_pConnection->Open("driver={SQL Server};Server=(local);DATABASE=data1","","",adModeUnknown);//!!!!!!!!!
        }
       //COM錯誤取得,當執行COM功能的時候,如果出錯,則可以撲捉到_com_error的異常catch(_com_error &e){::CoUninitialize();    ::AfxMessageBox(e.ErrorMessage());return FALSE;}
在注釋為!!!!!!!的地方一定要注意,如果你安裝 SQL的時候沒有設密碼,這裡要把UID 和 PWD取消掉,如果有密碼,則按下面方式,我之前用的是下面的方式,調試時一直出現idispatch #3149,後來把那兩個去掉就沒事了。
m_pConnection->Open("driver={SQL Server};Server=(local);DATABASE=data1;UID=sa;PWD=000","","",adModeUnknown);
6.在資源清單中的對話方塊中,添加一個按鈕,並添加相應函數,在這個函數中添加如下代碼,實現建立一個表並添加一個記錄和返回記錄個數的功能:
void CDataDlg::OnBtnTable() {// TODO: Add your control notification handler code here_variant_t ra;m_pConnection->Execute("CREATE TABLE 學生資訊(學號 INTEGER,姓名 TEXT,年齡 INTEGER,生日 DATETIME)",&ra,adCmdText);//往表格裡添加記錄,m_pConnection->Execute("INSERT INTO 學生資訊(學號,姓名,年齡,生日) VALUES(200202,'周華',22,'1978-08-16')",&ra,adCmdText);//執行SQL統計命令m_pRecordset=m_pConnection->Execute("SELECT COUNT(*) FROM 學生資訊",&ra,adCmdText);_variant_t vCount = m_pRecordset->GetCollect((_variant_t)(long)(0));m_pRecordset->Close();CString message;message.Format("共有%d條記錄",vCount.lVal);AfxMessageBox(message);}
編輯運行就可以看到資料庫data1有一個學生資訊的表了,並且裡面有一條記錄。

我剛才又試了一下,其實沒必要在data.cpp中定義下面兩個變數:
_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;
可以直接在dataDlg.cpp的前面直接定義,將初始化COM對象的那段移到dataDlg.cpp的初始化函數中,一樣可以實現。大家可以多試下,我也只是個新手,不足的地方請多指教。

總結:多思考,多動手,多嘗試,不要完全相信書上的內容,多試幾遍,其實沒你想的那麼難。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.