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

 一、引入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.tlh和msado15.tli(在您的Debug或Release目录下),在这两个文件里定义了ADO的所有对象和方法,以及一些枚举型的常量等,我们的程序只要直接调用这些方法就行了。

二、初始化COM环境
COM环境,这一步很多人忘记。如果不初始化COM环境,所有的相关的操作是会出错的!
初始化COM环境的代码如下:

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



VC程序,一般都放在BOOL CXXXXApp::InitInstance()这个函数的开始。



除了上面我这段代码外,还有另外一种初始化COM环境的方法,那就是使用CoInitialize()函数初始化COM环境,不过使用这个函数进行初始化时一定要记得在程序的结尾使用CoUninitialize()函数释放COM环境。



在操作数据库时,使用 AfxOleInit和CoInitialize初始化COM环境的区别:



1、OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:

与AfxOleInit()对应的是,AfxOleTerm(), 但是在你的程序中AfxOleTerm()可以不出现,MFC已经帮你做好了。

2、CoInitializeEx()与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 数据库连接字符串的说明》