vc資料庫編程-mfc odbc

來源:互聯網
上載者:User

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_FILE
static 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;
 */
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.