现在的位置: 首页 > 综合 > 正文

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

2018年05月04日 ⁄ 综合 ⁄ 共 1767字 ⁄ 字号 评论关闭

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

 一、引入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 数据库连接字符串的说明》

 

抱歉!评论已关闭.