方式一:使用CRecordset类读写
ODBC 在安装数据库首先要创建ODBC数据源,使用CDatabase和CRecordset两个MFC的类与数据库建立连接,访问数据库。
1.1条件
包含头文件:#include <afxdb.h>
声明成员变量:CDatabase m_dbPostGre;
1.2连接数据库(使用 CDatabase类)
int nRetVal;
nRetVal = m_dbPostGre.OpenEx( _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" ),
CDatabase::openReadOnly | CDatabase::noOdbcDialog );
if ( nRetVal )
{
AfxMessageBox( _T( "连接数据库成功!" ) );
}
1.3访问数据(使用CRecordset类)
CRecordset recordset( &m_dbPostGre );
CString strSQL = _T( "select * from product" );
recordset.Open( CRecordset::forwardOnly, strSQL, CRecordset::readOnly );
CDBVariant var;
while ( !recordset.IsEOF() )
{
TAG_PRODUCTINFO tagProductInfo;
// ID
recordset.GetFieldValue( _T( "ID" ), var );
tagProductInfo.nProductID = var.m_iVal;
// Name
recordset.GetFieldValue( _T( "Name" ), tagProductInfo.strProductName );
m_vecProductInfo.push_back( tagProductInfo );
recordset.MoveNext();
}
recordset.Close();
方式二:使用ExecuteSQL查询 (参考原文:http://www.iamlicky.cn/post/230.html)
用VC中的MFC,很好上手
#include <afxdb.h>
/* 连接数据库 */
CDatabase db;
BOOL bRtn;
try {
bRtn = db.OpenEx("DSN=数据源名;UID=sa;PWD=1234", CDatabase::noOdbcDialog);
}catch (CDBException *pDBEx) {
pDBEx->ReportError();
}catch (CMemoryException *pMemEx) {
pMemEx->ReportError();
}
if (!bRtn)
printf("连接数据库失败!");
/* 操作结束后,关闭数据库 */
db.Close();
添加记录操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、连接数据库,见(1) */
/* 2、生成INSERT语句,赋给sql,例如: */
sql = "insert into student_table (s_sID, s_sName, s_sAge) values (‘001’, ‘ZhangSan’, 20);" ;
/* 3、往数据库中添加纪录 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、关闭数据库 */
db.Close();
删除记录操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、连接数据库,见(1) */
/* 2、生成DELETE语句,赋给sql,例如: */
sql = "delete from student_table where s_SID =’001’;" ;
/* 3、从数据库中删除纪录 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、关闭数据库 */
db.Close();
修改记录操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、连接数据库,见(1) */
/* 2、生成UPDATE语句,赋给sql,例如: */
sql = "update from student_table set s_sName=‘LiSi’,s_sAge=21 where s_SID =‘001’;" ;
/* 3、更新数据库中的纪录 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、关闭数据库 */
db.Close();
查询、统计操作
#include <myRecordset.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、连接数据库,见(1) */
/* 2、生成查询/统计语句,赋给sql,例如: */
sql = "Select * From student_table where s_sAge=20;" ;
/* 3、打开记录集,查询/统计 */
CMyRecordset rs(&db);
try {
bRtn = rs.Open(CRecordset::snapshot,sql);
} catch(CDBException *pDBEx) {
pDBEx->ReportError();
} catch(CMemoryException *pMemEx) {
pMemEx->ReportError();
}
if(!bRtn) {
AfxMessageBox("Query table failed!",MB_OK|MB_ICONERROR);
return ;
}
/* 4、逐条获取查询结果 */
for(rs.MoveFirst();!rs.IsEOF();rs.MoveNext()) {
// TODO: Add code here
}
/* 5、关闭记录集、数据库 */
rs.Close();
db.Close();
感谢http://blog.csdn.net/zhongjling/article/details/8172886