C++ MFC操作ADO数据库中的多个数据表

在Windows环境下进行程序开发时,使用ADO技术可以很方便的对数据进行操作。本文将讲述在程序中使用一个数据库对象操作一个数据库文件中的多个表格。

操作数据库中数据的思路为:

1.创建数据库连接

2.打开数据库获取记录集

3.操作数据表内容:增删改

4.关闭记录集(注意,不是关闭连接)

通过上面可以知道,我们想要操作一个数据库中的多个表时:首先创建数据库连接,然后打开想要操作的数据表,获取记录集进行增删改等的操作,完成后关闭记录集;如果想要操作数据库中另一个表,再次打开相应的数据表进行操作,完成后再关闭即可。只要不关闭数据库连接,就可以一直通过这样简单的方法进行多个表的访问和操作。

下面就具体方法进行详细叙述:

1.首先定义了一个数据库操作相关的结构体

//数据库智能指针结构体
typedef   struct    _DB_
{
	//添加一个指向Connection的指针  
	_ConnectionPtr      m_pConnection;
	//添加一个指向Recordset对象的指针  
	_RecordsetPtr        m_pRecordset;
	_variant_t               RecordsAffected;
	_CatalogPtr            m_pCatalog;
	CString                   _conn_;
}DB;

//创建一个结构体实例
DB   db;

2.接下来创建数据库连接,需要注意,此示例程序中用的是ACCESS2010,不同版本的access数据源可能不一样,可根据自己所用的版本查找相关语句。

//dbname为一个变量,表示的是数据表文件的文件名, .accdb为数据库文件的文件扩展名
db._conn_ = L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbname + L".accdb";    
try
	{		
		db.m_pConnection = NULL;
		//创建m_pConnection实例
		db.m_pConnection.CreateInstance("ADODB.Connection"); 
        //连接超时时间
		db.m_pConnection->ConnectionTimeout = 3;
		//创建m_pRecordset实例
		db.m_pRecordset.CreateInstance(__uuidof(Recordset));
		db.m_pConnection->Open(_conn_, "", "", adModeUnknown);
	}
catch (_com_error e)
	{
	   //AfxMessageBox(f.Description() + _T("\n数据库连接失败"));
	    CString  error;
		error = f.ErrorMessage();
		AfxMessageBox(error + L"\n数据库连接失败");

	}

3.数据库连接成功后打开相应的数据表并获取记录集

 //已经有数据表打开则关闭记录集,一个数据库文件中有多个表时此句比较有用 
if (1 == db.m_pRecordset->State)               
		db.m_pRecordset->Close();
//打开记录集
	try
	{		
		//注意:在用 Open 方法打开记录集时使用了 adOpenStatic 游标;如果使用 adOpenDynamic 游标,GetRecordCount 方法将返回 -1 。
       //函数中的TableName为数据表的表名
	   db.m_pRecordset->Open("SELECT  *  FROM " + (_bstr_t)TableName,db.m_pConnection.GetInterfacePtr(), adOpenStatic, adLockPessimistic, adCmdText);
	}
	catch (_com_error a)
	{
		CString  err;
		err = a.ErrorMessage();
		AfxMessageBox(err +TableName+ L"打开失败,请重启软件");
		return -1;
	}

此时可以对打开的数据表进行增删改的操作了,

新增数据行:

db.m_pRecordset->AddNew();        //添加新纪录
//在表中名为“序号”那一列添加一行数据为“2”的内容
db.m_pRecordset->PutCollect(L"序号", _variant_t(2));
//在同一行的“类型”那一列,插入名为“高度”的内容
db.m_pRecordset->PutCollect(L"类型", _variant_t(“高度”));
 //将更改的内容更新,可理解成将更改写入到文件中
db.m_pRecordset->Update();  
//关闭记录集
db.m_pRecordset->Close();

此时,我想在此数据库文件的另一个表中也插入新的行,只需要再次执行第3步中的代码(将其中的表名改为需要操作的表名即可),然后就可以直接用recordset的方法进行数据操作。

操作一个数据库中的多个表和操作一个表的区别在于:操作多个表的情况下,需要在每次访问特定表时获取记录集,使用完成后关闭以便下次使用;操作单个表时只需要打开表获取记录集一次,直到程序退出时关闭即可,中间不需要进行关闭和再打开操作。

至此,C++ 操作ADO数据库中的多个数据表内容就已经讲述完毕,感谢!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值