vc数据库编程-mfc odbc
2006-11-05 13:48
579 查看
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;
*/
}
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;
*/
}
相关文章推荐
- vc数据库编程-mfc odbc
- VC数据库编程-MFC ODBC
- VC6.0数据库编程之MFC ODBC 详解1
- VC++课程设计:动漫新番信息管理系统(MFC+数据库ODBC接口)+外加两个副作品
- MFC ODBC数据库操作编程(二)
- MFC ODBC和ADO数据库编程自我小结
- VC数据库编程 MFC中相关类
- ODBC 数据库编程(VC)
- VC数据库编程_3 ---ODBC API编程
- VC 数据库编程 ADO和ODBC区别
- VC++MFC ADO数据库编程实现与总结
- VC 数据库编程 ODBC基本概念
- MFC ODBC数据库操作编程
- ODBC 数据库编程(VC)
- VC6.0数据库编程之MFC ODBC
- MFC ADO数据库编程中的_variant_t和_bstr_t类型
- VC数据库编程中的打印控制
- VC++动态链接库编程之非MFC DLL (转)
- VC数据库编程总结(二)
- VC数据库编程 08.11.12