VC用Ado接口连接和使用数据库及注意事项
2023-06-13 09:14:42 时间
一、阅读本文所需注意的其它事项
1、进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)
2、每个源文件的每行注释说明了其文件名
3、请关注相关头文件包含关系
4、请关注文中所有中文注释
5、更多的内容请参阅"VC安装目录\Include\adoint.h"文件,adoint即ActiveXDataObject
InterFace(菜鸟请勿惊慌,这仅仅只是个名称)
二、下面的源文件与您的数据库应用程序不直接相关,但其目标代码(生成的.obj文件)是您必需的,请参考
file://Ado.cpp文件///////////////////////////////////////////
#include
#include
#include
该文件使用方法:新建一个空的MFC工程,将此文件添加到该工程中,编译生成Ado.obj文件,再将此.obj文件添加到您的数据库应用程序.该源文件在您的数据库应用程序中是不需要的。
三、下面是与您的数据库应用程序源文件相关代码(非所有代码)
复制代码代码如下:
1、进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)
2、每个源文件的每行注释说明了其文件名
3、请关注相关头文件包含关系
4、请关注文中所有中文注释
5、更多的内容请参阅"VC安装目录\Include\adoint.h"文件,adoint即ActiveXDataObject
InterFace(菜鸟请勿惊慌,这仅仅只是个名称)
二、下面的源文件与您的数据库应用程序不直接相关,但其目标代码(生成的.obj文件)是您必需的,请参考
file://Ado.cpp文件///////////////////////////////////////////
#include
#include
#include
该文件使用方法:新建一个空的MFC工程,将此文件添加到该工程中,编译生成Ado.obj文件,再将此.obj文件添加到您的数据库应用程序.该源文件在您的数据库应用程序中是不需要的。
三、下面是与您的数据库应用程序源文件相关代码(非所有代码)
file://1、ado.h文件////////////////////////////////////////
#ifndef__ADO__H__LZG
#define__ADO__H__LZG
#include
#include
#include
#endif
file://2、stdafx.h文件////////////////////////////////////////
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#defineVC_EXTRALEAN//Excluderarely-usedstufffromWindowsheaders
#include//MFCcoreandstandardcomponents
#include//MFCextensions
#include//MFCAutomationclasses
#include//MFCsupportforInternetExplorer4CommonControls
#include"ado.h"file://请注意这里
#ifndef_AFX_NO_AFXCMN_SUPPORT
#include
file://3、数据库应用程序.h文件///////////////////////////////////////////////
file://以下为用到的若干相关数据库引用变量(声明在其头文件中)
ADOField*pfd;
ADOFields*pfds;
CStringm_dbfile;
ADORecordset*prs;
ADOConnection*pdb;
file://4、数据库应用程序.cpp文件/////////////////////////////////////////////
#include"stdafx.h"
#include"数据库应用程序.h"
file://这里添加其它相关头文件
file://以下为该.cpp文件中若干自定义或非自定义的方法,与数据库连接相关
file://其中每一条语句都有含义,请关注其中的注释
BOOLCBKDlg::InitDataEnv()
{
file://下面定义了一个简单的连接字符串,当然还有更复杂的
CStrings=_T("Provider=Microsoft.Jet.OLEDB.3.51;DataSource=d:\\data\\资料借阅管理.mdb");
::CoInitialize(NULL);//初始化COM环境
CoCreateInstance(CLSID_CADOConnection,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOConnection15,
(LPVOID*)&pdb
);//初始化一个ADO连接
CoCreateInstance(CLSID_CADORecordset,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADORecordset,
(LPVOID*)&prs
);//初始化一个ADO数据集
CoCreateInstance(CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOFields,
(LPVOID*)&pfds
);//初始化一个ADO数据域集合(域即是Fox中的字段,下同)
CoCreateInstance(CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOField,
(LPVOID*)&pfd
);//初始化一个ADO数据域集合中的一个域
file://打开上述ADO连接
pdb->Open((unsignedshort*)(LPCSTR)s,(unsignedshort*)"",(unsignedshort*)"",0);
file://打开上述ADO数据集,但它的连接参数是使用的上述字符串
file://应当存在以上面的连接替换该字符串的方法,但我没找到
prs->Open(COleVariant(_T("资料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);
file://数据集的域不存在打开与否,只需直接到已打开的数据集中引用即可,详情请见
file://CBKDlg::OnBeforeColUpdateDatagrid方法
m_dg.ClearFields();//MSDATAGRID控件(Activex)的数据清空
m_dg.SetRefDataSource(prs);file://上述控件与数据集的绑定
returnTRUE;
}
BOOLCBKDlg::DestroyWindow()
{
//TODO:Addyourspecializedcodehereand/orcallthebaseclass
m_dg.SetRefDataSource(NULL);
longstate;
file://下面的处理可能存在逻辑上的错误,不过关闭数据集与数据连接的语法是正确的
if(!FAILED(prs->get_State(&state)))
if(state!=adStateClosed)
{
prs->Close();
prs=NULL;
}
if(!FAILED(pdb->get_State(&state)))
if(state!=adStateClosed)
{
pdb->Close();
pdb=NULL;
}
::CoUninitialize();//释放COM环境
returnCDialog::DestroyWindow();
}
voidCBKDlg::OnBeforeColUpdateDatagrid(shortColIndex,VARIANTFAR*OldValue,shortFAR*Cancel)
{
file://该事件(方法)在MSDATAGRID控件(ActiveX)的单元数据更新前发生
file://该事件您可能用不着,但其中的代码您可能用得着
COleVariantv((LPCSTR)m_dg.GetText());//获取上述控件当前单元格的数据
CStringfieldname=m_dg.GetColumns().GetItem(COleVariant(ColIndex)).GetCaption();
DataTypeEnumfieldtype;//描述ADO数据类型的枚举类型
prs->get_Fields(&pfds);//从数据集中获得数据域集合
pfds->get_Item(COleVariant(fieldname),&pfd);//从数据域集合中获得特定名称的域
pfd->get_Type(&fieldtype);//从上述域中获取其数据类型,如整型或字符串型
switch(fieldtype){
caseadSmallInt:
caseadInteger:
break;
caseadDate:
break;
caseadCurrency://DatatypedescribingforMoney,Understand?
break;
caseadVarChar://对应于VB中的String类型和VC中的CString类型
break;
default:
break;
}
}//该方法来源于MSDataGridActiveX控件的事件,无具体的处理代码,望海涵
相关文章
- 22-物联网开发终端管理篇-PHP使用PDO方式连接MySQL数据库,并对外提供GET,POST接口获取数据库数据(.Windows系统)
- 各类数据库连接字符串格式
- sqlserver2008链接sqlserver2000数据库报错 出现无法获取链接服务器 “XXX“ 的 OLE DB 访问接口 “SQLNCLI10“ 的架构行集 “DBSCHEMA_TABLES
- sql中的insert语句怎么写?怎么向数据库中插入数据?
- Python 接口测试之数据库封装
- 基于GPT3.5实现本地知识库解决方案-利用向量数据库和GPT向量接口-实现智能回复并限制ChatGPT回答的范围
- 数据库:mongodb与关系型数据库相比的优缺点zz 详解大数据
- MySQL Status Com_shutdown 数据库状态作用意思及如何正确
- Oracle数据库中接口表的构建(oracle接口表)
- 查明MSSQL数据库的编码规则(查询mssql编码)
- 接口开启:利用MSSQL连接数据库(接口如何连接mssql)
- 探究MySQL数据库接口设计的关键技巧(mysql数据库接口设计)
- MySQL数据库格式化:获得稳定可靠的数据结构(mysql数据库格式化)
- Oracle 内置表挖掘数据库的宝藏(oracle内置的表)
- C语言与MySQL数据库的数据接口编程(c 与mysql 接口)
- API接口轻松连接MySQL数据库(api接口到mysql)
- cxoracle优秀的Python Oracle数据库接口(cx_oracle简介)
- 利用C语言实现ATM自动取款机的Oracle数据库接口(c oracle atm)
- Oracle数据库中间表接口实现分析(oracle中间表接口表)
- Oracle C接口实现数据库高效交互(oracle c 接口)