MFC 中ADO链接sql server 数据库

一.MFC中ADO链接数据库通常有四个步骤
(1)引入ADO文件
(2)初始化OLE/COM库文件
(3)利用Connection对象连接数据
(4)利用建立好的链接,通过Connection,Command对象执行SQL命令,或者利用Recordset对象取得结果进行查询和处理


1.引入ADO文件
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
为了避免冲突将常数EOF改名为adoEOF  并且上述预编译指令不能放在stdAfx.h文件的开头  应该放在所有include的后面




2.初始化OLE/COM库环境::CoInitialize(NULL) 在使用完后要用::CoUninitialize()释放
也可以用AfxOleInit()函数初始化  但是在使用完成后对于m_pRecordset不需要释放  系统会自动释放  不然的话会崩溃哦(亲身经历)
搞了好长时间都找不到原因  偶尔在网上看到才得以解决  只想说小细节但问题




3.利用Connection对象连接数据(对SQL server 链接数据库的几种不同的方式)
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(_uuidof(Connection));
try 
(1)CString strSQL="Provider=SQLOLEDB;
Integrated Security=SSPI;
Persist Security Info=False;
Initial Catalog=student;
Data Source=.";
m_pConnection->Open((_bstr_t)strSQL,"","",adModeUnknown);




(2)CString strSQL="Provider=SQLOLEDB;//和上述方法相同 只是去掉了几个参数而已  这里对于参数不明白 望各路大神指教
Integrated Security=SSPI;
Persist Security Info=False;
Initial Catalog=student;
Data Source=.";
m_pConnection->Open((_bstr_t)strSQL,"","",adModeUnknown);




(3)m_pConnection->Open("driver={SQL Server};Server=172.16.49.44;DATABASE=student;UID=sa;PWD=123",
"",
"",
adModeUnknown);
catch(_com_error e)
{
AfxMessageBox("失败连接数据库!");
return 0;
}




4.利用Recordset打开记录集并取得数据
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance (_uuidof(Recordset));


try
{
m_pRecordset->Open(
_variant_t("select * from stu"),
m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
_variant_t var;
CString str;
for(int i=0; !m_pRecordset->adoEOF; i++)
{
var = m_pRecordset->GetCollect("name");
str = (LPCSTR)_bstr_t(var);
m_listStuInfo.InsertItem(i,str);


var = m_pRecordset->GetCollect("age");
str = (LPCSTR)_bstr_t(var);
m_listStuInfo.SetItemText(i,1,str);


var = m_pRecordset->GetCollect("sex");
str = (LPCSTR)_bstr_t(var);
m_listStuInfo.SetItemText(i,2,str);


m_pRecordset->MoveNext();
}


m_pRecordset->AddNew();
m_pRecordset->PutCollect("StudentID",_variant_t(m_strNum));









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值