https://www.cnblogs.com/sunniflyer/p/4118956.html
数据库与数据库编程:
当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL,
DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS
ACCESS等等。
数据库编程是对数据库的创建、读写等一列的操作。数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用ODBC
API、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。
数据库编程需要掌握一些访问数据库技术方法,还需要注意怎么设计高效的数据库、数据库管理与运行的优化、数据库语句的优化。
ADO编程的一般步骤:
创建一个Connection对象
打开数据源,建立同数据源的连接
执行一个SQL命令
使用结果集
终止连接
ADO最重要的三个对象:
连接对象(Connection)
命令对象(Command)
记录集对象(RecordSet)
在使用这三个对象的时候,需要定义与之相对应的智能指针:_ConnectionPtr、_CommandPtr、_RecordsetPtr
使用智能指针要:定义指针变量、创建其实例(实例化)、调用方法和属性。该智能指针在析构对象时,自动调用Release方法,即使用后不需要手动释放内存,代码更加简洁。
但需要调用Close方法,关闭连接Connection或者记录集RecordSet。
一、ADO编程预处理操作
1.1 导入ADO动态链接库:
在工程的stdafx.h中加入如下语句:
#import "c:\\Program Files\\Common
Files\\System\\ADO\\msado15.dll" rename_namespace("ADOCG")
rename("EOF","adoEOF") //rename("BOF","adoBOF") no_namespace
using namespace ADOCG;
注:import代码要在一行中完成,换行需添加'\'
1.2 初始化OLE/COM库环境:
在基于MFC的应用里,在应用类的InitInstance成员函数中初始化OLE/COM库环境,直接使用AfxOleInit,在退出应用时,该函数自动负责COM资源的释放,比较方便,不用在
ExitInitInstance中添加相关操作:
BOOL CYourApp::InitInstance()
{
AfxEnableControlContainer();
//初始化OLE DLLs
if(!AfxOleInit())
{
AfxMessageBox("初始化OLE DLL失败!");
Return
FALSE;
}
......
}
二、ADO进行数据库连接:
2.1 在App类的头文件中定义变量:
_ConnectionPtr m_pConnection;
2.2 创建智能指针的实例:
在App类的cpp文件InitInstance方法中:
m_pConnection.CreateInstance("ADODB.Connection");
//或者m_pConnection.CreateInstance(__uuidof(Connection));
使用'.'而不是->创建m_Connection实例,然后m_pConnection->open方法创建连接。
2.3 设置连接字符串,以便指定需要的连接
2.3.1 使用JET数据库引擎实现对Acess2000类型的数据库info.mdb的连接
CString strSQL=_T("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=info.mdb;User ID=admin;Passward=;");
2.3.2 使用OLE DB提供者实现对SQL Server的标准安全连接串
CString str SQL=_T("Provider=SQLOLEDB;Data
Source=local;Initial Catalog=DVDRentDB_Data.MDF;User
ID=sa;Password=123456;");
或者是在此处不设置User
ID和Password,而直接在Open的第2、3个参数中设置。
CString
strConnection="Provider=SQLOLEDB;DataSource=local;Initial
Catalog=DVDRentDB_Data.MDF";
m_pConnection->Open((_bstr_t)strSQL,"sa","820415",adModeUnknown);
注意:
上面设置连接字符串的时候,如果过长需要分行时,则每一行都要加上双引号,在最后加上分号即可。
如果是本地服务器,则Data Source=loca l或 本地服务器名(主机名)
若数据库没有设置密码,在连接字符串中可以将其省略,但User ID不能省
若数据库和程序文件不在同一文件夹下,直接写数据库名即可,在InitialCatalog中不需加上该数据库的存储器地址
2.3.3 使用OLE DB提供者实现对远程SQL Server的标准安全连接串
strConnect=_T("Provider=sqloledb;