vc++中使用mfc通過ado連線資料庫方法小結(不包括異常的捕捉)
這裡主要講mfc與sql2000資料庫的連線。
::coinitialize(null);//表示com庫的初始化
::couninitialize();//釋放com庫。
3.獲取連線字串。
最簡單的方法就是新建乙個.txt檔案,將其字尾名改為.udl,雙擊它,在「提供程式」標籤頁中選擇「microsoft ole db provide fo sql server」,然後在「連線」標籤頁選擇填寫伺服器、資料庫、登陸方式等資訊,最後按「確定」。連線完成之後,將其用寫字板開啟,第三行資訊,如「provider=sqloledb.1;integrated security=sspi;persist security info=false;initial catalog=ruledb_data;data source=pye」即為連線字串。注意,若資料庫位於本機,在選擇填寫伺服器一欄可直接填寫(local),記得一定要加括號。
4.連線資料庫
在這裡引入乙個編寫好的封裝類:adoconn。該類封裝了連線資料庫,對資料庫進行新增、刪除、修改操作及獲取查詢記錄集操作的方法。使用者可直接使用,這個類的標頭檔案和cpp檔案內容將在本文最後給出。
在乙個工程裡加入該類的方法為:把該類的標頭檔案和cpp檔案拷貝到工程所在的資料夾裡。 然後在工程的工作區選擇project->add to project->files,將這兩個檔案選擇加入。
之後,就可以在程式裡應用這個類了。
首先在要用到資料庫的類的標頭檔案里設乙個該類的物件,即加入**:adoconn m_ado;注意:記得要先在最前面加入#include "adoconn.h"。
在應用這個物件對資料庫進行操作之前,先對其初始化: m_ado.oninitadoconn(strconnect);其中strconnect即為上面獲取的連線字串。
若要獲取資料庫中的部分記錄集,用m_ado.getrecordset(strsql);其中strsql中存放查詢語句,查詢結果存放於m_ado.m_precordset中,然後可用getcollect()函式挨個獲取所有符合條件的記錄的各個欄位的值。用完後記得用m_ado.m_precordset.close()關閉記錄集。
新增、修改、刪除操作,均用 m_ado.executesql(strsql);語句完成。
此外,若同時需要多種記錄集,則還需在要用到資料庫的類的標頭檔案裡新增記錄集的物件,即_recordsetptr m_precordset; m_precordset在用之前也需初始化,初始化語句為: m_precordset.createinstance(__uuidof(recordset));,同樣的,每回記錄集用完之後也得用close()函式關閉。
5.若在資料庫應用程式編譯時遇到102個錯誤,則可把debug資料夾刪了重新編譯即可。
adoconn類的標頭檔案:
#if !defined(afx_adoconn_h__2b491720_fa04_4800_b616_219e55abea46__included_)
#define afx_adoconn_h__2b491720_fa04_4800_b616_219e55abea46__included_
#if _msc_ver > 1000
#pragma once
#endif // _msc_ver > 1000
class adoconn : public cobject
_recordsetptr& getrecoptr()
public:
//事務回滾
bool rollbacktrans();
//遞交 事務
bool committrans();
//事務開始
bool begintrans();
bool adobof();//頭
bool adoeof();//尾
bool movenext();//下乙個
bool closetable();//關閉表
bool closeadoconnection();//關閉連線
bool getcollect(lpctstr name,cstring &lpdest);//獲取某個欄位的值
//執行sql語句 包含update delete insert
bool executesql(lpctstr lpszsql);
//初始化連線資料庫
bool oninitadoconn(lpctstr connstr);
// 執行select語句 獲取記錄集
_recordsetptr& getrecordset(lpctstr lpszsql);
adoconn();
virtual ~adoconn();
#endif // !defined(afx_adoconn_h__2b491720_fa04_4800_b616_219e55abea46__included_)
class cadoexception : public cexception
cstring m_strmessage;
virtual bool geterrormessage(lptstr lpstrerror, uint nmaxerror,
puint pnhelpcontext = null);
private:
int m_nerror;
};adoconn類的cpp檔案:
#include "stdafx.h"
#include "adoconn.h"
#ifdef _debug
#undef this_file
static char this_file=__file__;
#define new debug_new
#endif
//// construction/destruction
//adoconn::adoconn()
adoconn::~adoconn()
bool cadoexception::geterrormessage(lptstr lpstrerror, uint nmaxerror,puint pnhelpcontext /*= null*/)
else
strncpy(lpstrerror, text, nmaxerror - 1);
return true;
}bool adoconn::oninitadoconn(lpctstr connstr)
// 捕捉異常
catch(_com_error e)
}//執行sql語句 包含update delete insert
bool adoconn::executesql(lpctstr lpszsql)
catch(_com_error e)
}//執行select語句,獲得結果集,結果集放在m_precordset中
_recordsetptr& adoconn::getrecordset(lpctstr lpszsql)
// 捕捉異常
catch(_com_error e)
// 返回記錄集
return m_precordset;
}//獲取某個欄位的值
bool adoconn::getcollect(lpctstr name,cstring &lpdest)
*/if(vt.vt!=vt_null)
lpdest=(lpcstr)_bstr_t(vt);
else
lpdest="";
}catch (_com_error e)
return true;
}//關閉資料庫
bool adoconn::closeadoconnection()
catch (_com_error e)
return true;
}//關表
bool adoconn::closetable()
catch (_com_error e)
return true;
}//下乙個
bool adoconn::movenext()
catch (_com_error e)
return true;
}//尾
bool adoconn::adoeof()
//頭bool adoconn::adobof()
//事務開始
bool adoconn::begintrans()
catch (_com_error e)
return true;
}//遞交事務
bool adoconn::committrans()
catch (_com_error e)
return true;
}//事務回滾
bool adoconn::rollbacktrans()
catch (_com_error e)
return true;
}
MFC中用ADO連線資料庫
一 ado簡介 ado activex data object 是microsoft資料庫應用程式開發的新介面,是建立在ole db之上的高層資料庫訪問技術,請不必為此擔心,即使你對ole db,com不了解也能輕鬆對付ado,因為它非常簡單易用,甚至比你以往所接觸的odbc api dao rdo...
MFC通過ADO連線資料庫
msdn中提供mfc的連線資料庫的方法大約有三種方法 一是cdatabase類 odbc 一是dao,另一是 ole db,msdn上推薦的方法是odbc或者ole db方式。ole db是一組 元件物件模型 com 介面,是新的資料庫低層介面,它封裝了odbc的功能,並以統一的方式訪問儲存在不同資...
ADO連線資料庫
2009 05 02 19 06 1.ado物件連線資料庫 建立乙個mfc對話方塊工程 stdafx.h中新增 import c program files common files system ado msado15.dll no namespace rename eof adoeof rena...