VC+ADO下连接并操作sql2005数据库方法总结

landy 2011-10-28 02:37:31
最近在用VC ado连接SQL2005做开发,在网上也参考了好多资料,自己研究了几天,最后把使用方法思路整理下:
  在需要使用的地方按如下框架使用:
0. 定义一个CAdoConn 类全局对象, 例如:在CTestDialogI添加一个公有的成员变量CAdoConn m_adoconn;
1. 调用初始化OLE/COM库环境并连接数据库, 如:a_adoconn.OnInitADOConn(); 
2. 定义SQL查询字串,如:_bstr_t strSQL = "Select * from test";
3. 定义一个_RecordsetPtr类对象接收GetRecordSet(_bstr_t bstrSQL)返回的记录集,
  如:_RecordsetPtr m_pAddset=GetRecordSet(_bstr_t bstrSQL);
4. 通过m_pAddset 调用相关方法(MoveFirst,MoveNext,MovePrevious,MoveLast,AddNew,GetCollect,PutCollect等等)
  进行一系列相关操作
5. 关闭连接, m_adoconn.ExitConnect();

  相信大家一定有同感,网上vc下ADO连接sql2005的资料是比较少的,而且思路并不是很清晰,没用过的同鞋照上面的思路走一定没有问题,而且直接用下面给出的类就能用!

  经过几天的摸索,以后可以轻松的使用ado连接sql数据库了!嘿嘿 ,希望你也能和我一样能顺利使用!
  有问题可以留言,我一定尽量解答:

添加新类的过程就不说了:

下面是头文件跟.CPP实现文件。
头文件:
#import "c:Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
class CAdoConn
{
public:

//定义变量
_ConnectionPtr m_pConnection; //定义连接对象
_RecordsetPtr m_pRecordset; //定义记录集对象
_CommandPtr m_pCommand; // 定义命令集对象
CAdoConn();
virtual ~CAdoConn();
//初始化连接数据库
void OnInitADOConn();
//执行查询
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
//执行SQL语句,Inset Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();

};

.cpp文件如下,即类中几个方法的实现:
CAdoConn::CAdoConn()
{

}
CAdoConn::~CAdoConn()
{
}

//初始化OLE/COM库环境并连接数据库
void CAdoConn::OnInitADOConn()

{
::CoInitialize(NULL);
try
{
// 创建Connection对象实例
m_pConnection.CreateInstance(__uuidof(Connection));// __uuidof(Connection) 可以换成"ADODB.Connection"
_bstr_t strConnect="Driver={SQL Server};Server=PC2011092510DPA;Database=db_student";
m_pConnection->Open(strConnect,"","",adModeUnknown); //建立连接
}
catch (_com_error e)
{
// 显示错误信息
MessageBox(NULL,e.Description(),"错误提示",0);
}
}
_RecordsetPtr& CAdoConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset)); //__uuidof(Recordset) 可以换成"ADODB.Recordset"
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
MessageBox(NULL,e.Description(),"错误提示",0);
}
// 返回记录集
return m_pRecordset;
}
// 执行SQL语句,Insert Update _variant_t ,操作数据库
BOOL CAdoConn::ExecuteSQL(_bstr_t bstrSQL)

{
// _variant_t RecordsAffected;
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
MessageBox(NULL,e.Description(),"错误提示",0);
return false;
}
}

//关闭连接
void CAdoConn::ExitConnect()
{
try
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pRecordset=NULL;
if (m_pConnection != NULL)
{
m_pConnection->Close();
m_pConnection=NULL;
}
}
catch (_com_error e)
{
MessageBox(NULL,e.Description(),"错误提示",0);
return ;
}
// 释放环境
::CoUninitialize();
}
...全文
772 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kjxyzhaobo_01 2014-07-04
  • 打赏
  • 举报
回复
这简直是傻瓜式操作啊,楼主很用心,赞一个
linhongquan1990 2013-10-31
  • 打赏
  • 举报
回复
多谢楼主,很给力
工程师123123123 2012-10-16
  • 打赏
  • 举报
回复
不顶不行,楼主总结得很好
fxwtxcl 2012-09-22
  • 打赏
  • 举报
回复
不错,又学到了很多,谢谢!
liunian17 2011-11-19
  • 打赏
  • 举报
回复
...................
Oliver2891 2011-10-28
  • 打赏
  • 举报
回复
基本的知识,多谢分享
landy 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lxsdyj 的回复:]

我今天查了一天的资料

我也是要用vc连接sql2005 网上介绍说可以用 ADO ODBC,但是我看了一天资料,现在都无从下手
[/Quote]

没仔细看过其他的数据库,如果能通用更好
landy 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lxsdyj 的回复:]

我今天查了一天的资料

我也是要用vc连接sql2005 网上介绍说可以用 ADO ODBC,但是我看了一天资料,现在都无从下手
[/Quote]

看了没看懂吗?很简单的,我也是在网上看了好多资料,有些乱,但是自己屡了一下,我现在我用起来思路挺清晰的,什么地方不懂可以问我.
landy 2011-10-28
  • 打赏
  • 举报
回复
看了没看懂吗?很简单的,我也是在网上看了好多资料,有些乱,但是自己屡了一下,我现在我用起来思路挺清晰的,什么地方不懂可以问我
zyq5945 2011-10-28
  • 打赏
  • 举报
回复
用ADO吧,置顶的帖子里有,就是把ACCESS的连接字符串换成SQL2005的就可以。
duoduo 2011-10-28
  • 打赏
  • 举报
回复
我今天查了一天的资料

我也是要用vc连接sql2005 网上介绍说可以用 ADO ODBC,但是我看了一天资料,现在都无从下手

dawugui 2011-10-28
  • 打赏
  • 举报
回复
虽然不懂,怎么也要进来看看.

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧