MFC操作SQL server数据库之连接数据库

在操作数据库之前我们需要做一系列的准备工作,我把这些的准备工作都归纳为连接数据库。那么在操作数据库之前我们需要做那些准备工作呢?

 一、引入ADO动态库文件

二、初始化COM环境

三、连接数据库

 

一、引入ADO动态库文件
stdafx.h文件中对ADO动态库文件进行引入,代码如下

#include <icrsint.h>
#import "C:\\program files\\common files\\system\\ado\\msadox.dll"
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" \
no_namespace rename("EOF", "adoEOF") rename("Error","adoError")

    在加入代码时需注意,要放在stdafx.h默认所包含的所有头文件之后, 所谓的默认就是系统自动添加的.h包含语句,不包括我们自己添加进去的.h包含语句。
还有一点,  #include <icrsint.h> 这条包含语句不能丢 , 它包含了VC++扩展的一些预处理指令、宏等的定义,用于COM编程时使用。
程序在编译过程中,VC++会读出msado15.dll中的类型库信息,自动产生两个该类型库的头文件和实现文件msado15.tlhmsado15.tli(在您的DebugRelease目录下),在这两个文件里定义了ADO的所有对象和方法,以及一些枚举型的常量等,我们的程序只要直接调用这些方法就行了。

二、初始化COM环境
    在对数据库操作之前必须要初始化COM环境,这一步很多人忘记。如果不初始化COM环境,所有的相关的操作是会出错的!
初始化COM环境的代码如下:

if(!AfxOleInit())
{
AfxMessageBox("加载OLE/COM支持库失败!!");
exit(1);
}

    将这段代码放在程序开始的地方,保证这段代码始终在所有数据库操作之前,对于VC程序,一般都放在BOOL CXXXXApp::InitInstance()这个函数的开始。
除了上面我这段代码外,还有另外一种初始化COM环境的方法,那就是使用CoInitialize()函数初始化COM环境,不过使用这个函数进行初始化时一定要记得在程序的结尾使用CoUninitialize()函数释放COM环境。
在操作数据库时,使用 AfxOleInitCoInitialize初始化COM环境的区别:
1OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:
 (1)Clipboard;   
 (2)Drag and drop;   
 (3)Object linking and embedding
 (4)In-place   activation
AfxOleInit()对应的是,AfxOleTerm(), 但是在你的程序中AfxOleTerm()可以不出现,MFC已经帮你做好了。
2CoInitializeEx()CoUninitialize()而且在程序中不可以重复调用此函数,否则会导致出错。

三、连接数据库
    其实连接数据库这个说简单也很简单,说复杂也很复杂。很多人在连接数据库的时候都会或多或少的出点错误,但其实它也就是一两条语句而已。简单的连接数据库代码如下
CString strConnect("Provider=SQLOLEDB.1;Persist Security Info=False;\
Initial Catalog=Lggl_Knowledge_Third;Data Source=172.18.5.5");
m_myConnect->Open(_bstr_t(strConnect), "", "", adModeUnknown);
连接数据库的关键点不是在函数的使用上,而是连接语句的设计上。在这上面我也栽倒了很多次,为此专门进行了一次总结,
大家可以看看我的这篇总结:
SQL 数据库连接字符串的说明》

 


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值