您的位置:首页 > 编程语言 > C语言/C++

VC++之 实现ODBC数据库操作实例解析

2016-05-24 18:44 375 查看
方式一:使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息