正文

vc数据库编程-mfc odbc2007-08-28 17:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/28915.html

分享到:

1.连接数据库CDatabase conn;conn.OpenEx(_T("DSN=bbodbc")); 2.执行更新 conn.ExecuteSQL(updateSQL); 3.CRecordset初始化 rst = new CRecordset(&conn);  //指针或者下面的也可以rst.m_pDatabase = &conn; //针对非指针 4.执行查询 rst->Open(AFX_DB_USE_DEFAULT_TYPE, selectSQL); 5.处理记录集  CRecordset *rst = bb.executeSelect(_T("select * from userinfo"));  try {  int iListIndex = 0;  while (!rst->IsEOF())  {   CString strID, strName;   rst->GetFieldValue("userid", strID);   rst->GetFieldValue("username", strName);   //MessageBox(strFiledValue);   m_listbox.AddString(strName);   m_list2.InsertItem(iListIndex, strID);   m_list2.SetItemText(iListIndex, 1, strName);   iListIndex++;   rst->MoveNext();  }  rst->Close(); } catch (CDBException *ex) {  AfxMessageBox(ex->m_strError); } 其中bb 为封装的一个ODBC的操作的对象   下面提供简单的ODBC封装类:注意在预编译头文件(StdAfx.h)中包含#i nclude <afxdb.h> 注意链接的关闭处理 class CBBODBC  {public: CBBODBC(); virtual ~CBBODBC();  void connect(); void connect(const CString szDSN); void close(); void executeUpdate(const CString updateSQL); CRecordset* executeSelect(const CString selectSQL); private: CDatabase conn; CRecordset *rst; //CRecordset rst; CString static m_connstr;}; #i nclude "stdafx.h"#i nclude "BBODBC.h" #ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif //////////////////////////////////////////////////////////////////////// Construction/Destruction////////////////////////////////////////////////////////////////////// /*1.数据库操作的两种方式,RFX, 自己定义操作2.连接数据库的方式3.执行更新,查询,处理查询结果4.AddNew等操作*/CBBODBC::CBBODBC(){ connect(); rst = new CRecordset(&conn); //rst.m_pDatabase = &conn;} CBBODBC::~CBBODBC(){ close();} //使用openEx要: _T("DSN=bbodbc")//但使用open较随意:_T("bbodbc")即可CString CBBODBC::m_connstr(_T("DSN=bbodbc")); void CBBODBC::connect(){ connect(m_connstr);} void CBBODBC::connect(const CString szDSN){ if (!conn.IsOpen())  conn.OpenEx(szDSN);} void CBBODBC::close(){ if (NULL != rst)  {  if(rst->IsOpen())   rst->Close();  delete(rst);  rst = NULL; //此处比较重要 } if(conn.IsOpen())  conn.Close();} void CBBODBC::executeUpdate(const CString updateSQL){ conn.ExecuteSQL(updateSQL);} /*此处返回rst的指针,可以不用类成员变量,直接定义一个CRecordset*,然后返回,在调用时,会传递这个指针,但要在调用函数中关闭,并删除指针指向内存。如果写到类成员里,可以在类内部控制指针指向内存的删除,但不知道公用CRecordset*会不会出现问题。*/CRecordset* CBBODBC::executeSelect(const CString selectSQL){  rst->Open(AFX_DB_USE_DEFAULT_TYPE, selectSQL); return rst;  /* CRecordset rs(&conn); rs.Open(AFX_DB_USE_DEFAULT_TYPE, selectSQL); while(!rs.IsEOF()) {  CString str;  rs.GetFieldValue(1, str);  AfxMessageBox(str);  rs.MoveNext(); } return NULL; */}  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1367491

阅读(8319) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册