MFC运用ADO操作数据库

合集下载

mfc sqlserver使用

mfc sqlserver使用

MFC(Microsoft Foundation Classes)是微软提供的一个类库,用于在C++环境下编写应用程序。

而SQL Server是由Microsoft 开发和推广的关系数据库管理系统(RDBMS)。

MFC本身并不直接与SQL Server数据库交互,而是通过ADO (ActiveX Data Objects)或MFC的数据库类(如CDatabase,CRecordset等)来实现与数据库的交互。

如果你想在MFC应用程序中使用SQL Server,你需要做的是:
1. 配置SQL Server数据库:安装SQL Server,创建数据库,配置服务器等。

2. 连接到数据库:使用ADO或MFC的数据库类来连接到你的SQL Server数据库。

3. 执行SQL语句:使用ADO或MFC的数据库类来执行SQL语句,如查询、插入、更新和删除等。

4. 处理结果:获取查询结果,处理异常等。

在MFC应用程序中,你可以使用ADO对象来与SQL Server数据库进行交互。

例如,你可以使用ADO的Connection对象来连接到数据库,使用Command对象来执行SQL语句,使用Recordset对象来获取查询结果等。

另外,你还可以使用MFC的数据库类来与SQL Server数据库进行交互。

例如,你可以使用CDatabase类来打开数据库连接,使用CRecordset类来执行查询并获取结果等。

总的来说,要在MFC应用程序中使用SQL Server数据库,你需要掌握一些关于ADO或MFC的数据库类的知识,并了解如何连接到数据库、执行SQL语句和处理结果等操作。

使用ADO操作数据库

使用ADO操作数据库
Private Sub Form_Load() Adodc1.CursorLocation = adUseClient Adodc1.CursorType = adOpenStatic Adodc1.LockType = adLockBatchOptimistic mandType = adCmdTable Adodc1.RecordSource = "s5" Set DataGrid1.DataSource = Adodc1 End Sub
2、ConnectionString属性的参数:
参数 Provider File Name Remote Provider 说明 指定用于连接的数据源的名称 指定基于数据源的文件名称 指定打开一个客户端连接时使用的数据源 的名称(仅限于远程数据服务) 指定打开一个客户端连接时使用的服务器 的路径和名称(仅限于远程数据服务)
DataGrid控件(数据网格:ActiveX控件,用于输入大批 量的数据,可同时修改或浏览多条记录 DataGrid 属性 RecordSouces设置为该ADO Data控件
DataGride控件可手工设置显示字段及其顺序、 格式、颜色等,还可以对显示字段重新命名 (显示)
10.2.3 用语句设置控件属性
1、选定每个 TextBox 控件,并在其“属性”窗口中将 “DataSouce”属性设置为该 ADO Data 控件。 2、将“DataField”属性设置为在该数据库中想要察看或修改的 字段的名称。
ADO Data控件: 移动记录(单击箭头), 修改记录(Locked=False 自动保存 增加新记录(EofActive)
End Sub
删除数据:
Private Sub Command3_Click() Adodc1.Recordset.ActiveConnection.Execute = "exec s5_delete '" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "'" 'Adodc1.RecordSource = "exec s5_delete '" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "'" Adodc1.Refresh End Sub

实验16 ADO数据库编辑

实验16 ADO数据库编辑

实验内容创建一个基于ClistView试图的单文档应用程序Ex_ADO,主要完成下列任务或实现下列功能。

(1)用Access创建一个数据库student.mdb,添加数据表student,如表T16.1所示。

表上部分是数据表的记录内容,下部分是数据的结构内容。

(2)表T16.1学生基本信息表(student) 及其表结构姓名studentname 学号sudentno性别xb出生年月birthday专业special李明21010101 True 1985-1-1 电气工程及其自动化王玲21010102 False 1985-1-1 电气工程及其自动化张芳21010501 False 1985-1-1 机械工程及其自动化陈涛21010502 True 1985-1-1 机械工程及其自动化序号字段名称数据类型字段大小小数位字段含义1 Studentname 文本20 姓名2 Studentno 文本10 学号3 Xb 是/否性别4 Birthday 日期/时间出生年月5 special 文本50 专业(2)在主菜单中添加“学生信息(&S)”顶层菜单,在该菜单添加“添加学生(&U)”子菜单。

当选择“添加学生(&U)”子菜单后,出现“学生信息”对话框,单击“添加”按钮后,记录添加到student 表中,并自动更新列表视图的列表项。

(3 ) 在列表视图的列表项中,单击鼠标右键,弹出“学生信息”对话框,如图T16.1所示。

单击“修改”按钮,student表中相关记录被修改,同时更新列表视图的列表项。

(4)若单击列表视图的列表头(标题头)时,使得列表视图按该列的内容对列表项进行从小到大的排序。

实验准备和说明(1)在教程第8章全部讲授后进行本次实验。

(2)用ADO实现数据库表的添加和修改功能,构思本机上机所需要的程序。

实验步骤1创建工作文件夹打开计算机,在“D:\VisualC++程序\LiMing”文件夹中创建一个新子文件夹“实验16”。

ado连接oracle数据库

ado连接oracle数据库
m_pwd="crmdbo";//密码
BOOL retFt=false;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
_bstr_t connStr;
//begin---------------Oracle 微软格式---------------------------------------
// connStr="Provider=MSDAORA.1;User ID=njcrm;Password=crmdbo;Data Source=192.168.0.24;Persist Security
Info=False";
// m_pConnection->Open(_bstr_t(connStr),(_bstr_t)_T(""),(_bstr_t)_T(""),adConnectUnspecified);
//end---------------Oracle 微软格式---------------------------------------
{
if(!AfxOleInit())//这就是初始化COM库
{
AfxMessageBox(“OLE初始化出错!”);
return FALSE;
}
}
3.ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。与数据库的连接就是用_ConnectionPtr接口,它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。以下的例子都测试通过,顺便写了SQL Server的例子。

VC++中链接数据库并实现(添加、修改、删除、清空)功能

VC++中链接数据库并实现(添加、修改、删除、清空)功能

VC++中链接数据库并实现(添加、修改、删除、清空)功能VC++中⽤ADO编程⽅法链接数据库并实现添加、修改、删除、清空等功能1、数据库为Microsoft Office Access 2003为例2、数据库名为DataBase.mdb,表名employees,添加编号、学号、姓名字段,类型为⽂本。

数据库放在p5根⽬录下。

3、建⽴新建⼯程MFC AppWizard[exe]名称为p5。

选择基本对话框。

然后添加控件,⼀个列表控件,三个编辑框,五个按钮。

如下在列表控件,右键属性。

设置如下:然后建⽴类向导,在Member V ariables视图中为3个编辑框和1个列表控件添加变量名称和类型如图:五个按钮的ID和名字改为:IDC_BUTADD,添加;IDC_BUTMOD,修改;IDC_BUTDEL,删除;IDC_BUTCLICK,清空;IDC_BUTTON1,退出。

4、为⼯程加类ADO类,在ClassView中视图中在p5 classes上⾯点右键新建类,类的类型选Generic Class,名称为ADO,点确定。

同时在StdAfx.h头⽂件中加⼊ADO动态链接库,代码如下:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\rename("EOF","adoEOF")rename("BOF","adoBOF") //导⼊ADO动态链接库在Class View视图中的CP5Dlg中加⼊⾃定义函数AddToGrid和OnButclear。

这两个函数是⼿动添加的。

5、在ADO.app中程序为// ADO.cpp: implementation of the ADO class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "p5.h"#include "ADO.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////ADO::ADO(){}ADO::~ADO(){}void ADO::OnInitADOConn(){::CoInitialize(NULL);try{m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象实例_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\uid=;pwd=;DBQ=DataBase.mdb;";m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库}catch(_com_error e){AfxMessageBox(e.Description()); //弹出错误处理}}_RecordsetPtr& ADO::OpenRecordset(CString sql){ASSERT(!sql.IsEmpty()); //SQL语句不能为空try{m_pRecordset.CreateInstance(__uuidof(Recordset)); //创建记录集对象实例m_pRecordset->Open(_bstr_t(sql),m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText); //执⾏SQL得到记录集}catch(_com_error e) //捕获可能的异常{AfxMessageBox(e.Description());}return m_pRecordset;}void ADO::CloseRecordset(){if(m_pRecordset->GetState() == adStateOpen) //判断当前的记录集状态m_pRecordset->Close(); //关闭记录集}void ADO::CloseConn(){m_pConnection->Close(); //关闭数据库连接::CoUninitialize(); //释放COM环境}UINT ADO::GetRecordCount(_RecordsetPtr pRecordset){int nCount = 0; //声明保存记录数的变量try{pRecordset->MoveFirst(); //将记录集指针移动到第⼀条记录}catch(...) //捕捉可能出现的错误{return 0; //产⽣错误时返回0}if(pRecordset->adoEOF) //判断记录集中是否没有记录return 0; //⽆记录时返回0while (!pRecordset->adoEOF) //当记录集指针没有指向最后时{pRecordset->MoveNext(); //将记录集指针移动到下⼀条记录nCount = nCount + 1; //记录个数的变量加1}pRecordset->MoveFirst(); //将记录集指针移动到第⼀条记录return nCount; //返回记录数}6、在ADO.h头⽂件中程序为// ADO.h: interface for the ADO class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_ADO_H__E0F8432E_F797_4979_8FB0_EAC60CA6 C7F9__INCLUDED_) #defineAFX_ADO_H__E0F8432E_F797_4979_8FB0_EAC60CA6C7F9__INC LUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class ADO{public:_ConnectionPtr m_pConnection; //连接对象指针_RecordsetPtr m_pRecordset; //记录集对象指针public:ADO();virtual ~ADO();void OnInitADOConn(); //连接数据库_RecordsetPtr& OpenRecordset(CString sql); //打开记录集void CloseRecordset(); //关闭记录集void CloseConn(); //关闭数据库连接UINT GetRecordCount(_RecordsetPtr pRecordset); //获得记录数};#endif// !defined(AFX_ADO_H__E0F8432E_F797_4979_8FB0_EAC60CA6C 7F9__INCLUDED_)这是⼀个封装的连接数据库⽂件。

使用ADO访问达梦数据库

使用ADO访问达梦数据库

使用ADO访问达梦数据库微软的Windows操作系统是当前应用程序的主流开发和使用平台,它提供了数种不同的数据访问存储技术,比较常见的有以下几种:ODBC它只能通过以C/C++语言API的形式提供数据库服务。

OLE-DB为了从各种不同的数据源中存取数据,并且能够处理非关系数据;同时为了使应用程序能够以统一的方式存取各种不同的数据源,微软推出了OLE-DB。

OLE-DB定义了统一的COM接口作为存取各类数据源的标准,并且统一封装在一组COM对象之中。

ADO由于OLE-DB太过于底层,很难被大部分程序员接受,同时为了让脚本语言也能使用OLE-DB存取各种数据源,微软又用COM技术将OLE-DB封装为ADO对象。

ADO的架构大家可以看出ADO可以通过OLE-DB直接访问数据源,也可以通过OLE-DB转ODBC的方式来访问数据源,但除了为了兼容原有应用系统,否则我们推荐通过OLE-DB直接访问数据源的方式。

DM 数据库对外提供了标准的OLE-DB和ODBC接口,所以我们可以在开发程序时任意使用ADO的两种方式(通过ODBC和通过OLE-DB)来访问达梦数据库。

虽然现在微软又推出了新一代的数据访问对象,但目前还是有很多程序员在windows下进行数据库应用程序开发时使用ADO;Delphi是一种快速的RAD开发工具,并且提供了一组优秀的ADO 组件;所以本文介绍一个在Delphi 7.0 下使用ADO访问达梦数据库的小程序实例。

首先,在Delphi中设定如下程序界面:ADO对象实际上就是COM对象,程序员可以直接在ObjectPascal中调用CreateOleObject方法来建立原生ADO对象;Delphi同时也提供的ADO组件封装了原生ADO对象,ADO组件包含了ADOConnection , ADOCommand , ADODataSet , ADOTable , ADOQuery , ADOStoreProc这几个组件,这五个组件统称为数据集组件,他们都封装了原生ADO的Record对象,我们在程序中使用了TADODataSet,TDataSource 和TADOStoredProc三个控件,同时在程序运行时动态创建和使用了TADOConnection,TADOQuery对象。

VC++ADO连接数据库操作.wps

VC++ADO连接数据库操作.wps

VC++ ADO连接数据库操作(1)、引入ADO类#import "c:/program files/common files/system/ado/msado15.dll" /no_namespace /rename ("EOF", "adoEOF")(2)、初始化COM在MFC中可以用AfxOleInit();非MFC环境中用:CoInitialize(NULL);CoUnInitialize();(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 1.连接和关闭数据库(1)连接例子:连接ACCESS数据库AfxOleInit();//初始化HRESULT hr;try{hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象if(SUCCEEDED(hr)){m_pConnection->ConnectionTimeout = 0;hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb", "", "", adModeUnknown);//m_pConnection->PutDefaultDatabase ((_bstr_t)"DB");//设置默认数据库m_pCommand.CreateInstance(__uuidof(Command));m_pCommand->CommandTimeout = 5;m_pCommand->ActiveConnection = m_pConnection;}}catch(_com_error e)///捕捉异常{CString errormessage;errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息}(2)、关闭//如果数据库连接有效if( m_pConnection->State )m_pConnection->Close();m_pConnection = NULL;(3)、设置连接时间//设置连接时间-----------------------------------pConnection->put_ConnectionTimeout(long(5));2.打开一个结果集(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果_RecordsetPtrm_pRecordset;m_pRecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,// 因为它有时会经常出现一些意想不到的错误。

MFC和ACCESS数据库的连接

MFC和ACCESS数据库的连接

MFC和ACCESS数据库的连接(C_Answers团队开发学生信息管理系统所用)1.通常在应用类(APP类)中进行数据库的连接。

(不在dialog类中,,因为要在出现对话框前已经建立好数据库的连接)第一步:数据库操作准备1)导入ADO动态链接库。

在stdafx.h中。

在工程的stdafx.h中加入如下语句:#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")这一句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会我们声称msado15.tlh和msado15.tl两个C++头文件来定义ADO库。

即加载ADO动态连接库。

其中no_namespace表明不使用命名空间,rename("EOF","adoEOF")表明把ADO中用到的EOF改为adoEOF,防止命名冲突。

注意:改代码需要在一行中完成,如果写成两行或者多行,末行要加上"\"符号,表示把这几行看成一行。

2)初始化OLE/COM环境,在应用类(app)的lnitlnstance成员函数中。

方法:在应用类的lnitlnstance成员函数中,添加AfxOlenit函数(在退出应用时,该函数也将负责COM资源的释放)BOOL CMy13App::InitInstance(){AfxEnableControlContainer();//添加的初始化OLE/COM环境代码if(!AfxOleInit()){AfxMessageBox("初始化OLE DLL失败!");return FALSE;}第二步:连接数据库1)先在APP头文件中声明一个connection指针。

在VBA中使用ADO对象处理数据库

在VBA中使用ADO对象处理数据库

在VBA中使用ADO对象处理数据库VBA(Visual Basic for Applications)是一种编程语言,它可以与Microsoft Office应用程序(如Excel、Access、Word等)集成。

通过使用VBA,我们可以自动化执行各种任务,包括处理数据库。

在本文中,我们将探讨如何使用VBA中的ADO(ActiveX Data Objects)对象处理数据库。

ADO是Microsoft提供的一个用于访问数据库的COM 组件。

首先,我们需要了解一些基本的概念和术语。

数据库是一个结构化存储数据的容器,它由表(Table)组成,每个表包含多个记录(Record)。

每个记录由一行表示,每行由多个字段(Field)组成。

字段是记录中的单个数据项。

要处理数据库,我们需要使用SQL(Structured Query Language)语句来执行各种操作,如查询、插入、更新和删除数据。

接下来,我们将讨论如何使用VBA中的ADO对象连接到数据库。

首先,我们需要在VBA编辑器中启用对ADO的引用。

在“工具”菜单下选择“引用”,然后勾选“Microsoft ActiveX Data Objects x.x Library”。

接下来,我们可以通过创建一个ADODB.Connection对象来建立与数据库的连接。

下面是一个示例代码,展示了如何通过ADO对象连接到数据库:```vbaDim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB;Data Source=数据库服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码"conn.Open```上面的代码使用SQL Server作为数据库服务器,连接字符串中指定了服务器名称、数据库名称、用户名和密码。

Vc++(MFC)实现SQLServer的远程连接SQLOLEDB

Vc++(MFC)实现SQLServer的远程连接SQLOLEDB

Vc++(MFC)实现SQLServer的远程连接SQLOLEDBVc++(MFC)实现SQL Server的远程连接(ADO实现)一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例OLE DB 而设计的,是一个便于使用的应用程序层接口OLE.DB 提供者访问和操作数据库服务器中的数据。

ADO 最主要的优点是易于使用、速度快、内存支出少和磁最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。

之所喻,OLE 自动化接口。

二、利用ADO来实现对SQL Server的远程连接1、首先是引入ADO库文件使用ADO前必须在你的工程中的stdafx.h文件里直接引入符号#import引入A 如下内容:#include#include#import "C:\program files\common files\system\ado\msado15.dll" \no_namespace rename("EOF", "ADOEOF") 这行语句声明在工程中使用ADO,但不使用ADO的名字改名为"ADOEOF"。

现在不需添加另外的头文件,就可以使用ADO接口了。

2、初始化OLE/COM库环境在InitInstance()函数下面初始化OLE/COM库BOOL ****** ::InitInstance(){//下面是需要添加的代码:if (!AfxOleInit())//初始化OLE/COM库环境{AfxMessageBox("OLE初始化出错!");return FALSE;}................}3、下面是连接数据库代码:定义_ConnectionPtr接口和_RecordsetPtr接口。

如下:_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;实现代码:HRESULT hr;try{hr = m_pConnection.CreateInstance("ADODB.Connection");if (SUCCEEDED(hr)){//connect database_bstr_t strConnect="Provider=SQLOLEDB.1;Initial Catalog=“数据库名称”;Data Source=远程IP";hr = m_pConnection->Open(strConnect,"用户名","密码",adModeUnknown);AfxMessageBox("连接成功");}}catch(_com_error e){CString errormessage;errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return ;}4、查询数据库信息:添加listctrl控件,并定义为m_list ;在winfo表中查询id,name,ip信息。

VS2010MFC中ADO方式连接SQL Server2008学习心得

VS2010MFC中ADO方式连接SQL Server2008学习心得

1,连接数据库:这个也是在网上有各种各样的方法,包括直接连接或者用DNS连接,大家多去试试肯定会有一种能行,这里说我的:比如我的程序名叫ma的一个对话框,那么在Cmaapp里面的initialize函数里面添加:BOOL CmaApp::InitInstance(){// 如¨?果?一°?个?运?行D在¨² Windows XP 上¦?的Ì?应®|用®?程¨¬序¨°清?单Ì£¤指?定¡§要°a// 使º1用®? ComCtl32.dll 版ã?本À? 6 或¨°更¨¹高?版ã?本À?来¤¡ä启?用®?可¨¦视º¨®化¡¥方¤?式º?,ê?//则¨°需¨¨要°a InitCommonControl sEx()。

¡ê否¤?则¨°,ê?将?无T法¤¡§创ä¡ä建¡§窗ä¡ã口¨²。

¡êINITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将?它¨¹设¦¨¨置?为a包㨹括¤¡§所¨´有®D要°a在¨²应®|用®?程¨¬序¨°中D使º1用®?的Ì?// 公?共2控?件t类¤¨¤。

C++ADO方式连接数据库

C++ADO方式连接数据库
c++ ADO 连接数据库
需要的两个封装文件 ADOConn.h 和 ADOConn.cpp ,加载进项目里面,然后创建
ADOConn 对象,就可以使用相关功能及函数了。
总的来说,ADO 库包含三个基本接口:_ConnectionPtr 接口、_CommandPtr 接口和 _RecordsetPtr 接口。
//SQL 语句执行完毕,读取查询结果
try { m_pRecordset->MoveFirst(); //记录集指针移动到查询结果集的前面 while(m_pRecordset->adoEOF==VARIANT_FALSE) { //这里就读取 emp 表中的雇员的名字 char *sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("ename"))->Value); cout<<(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("ename"))->Value)<<endl; m_pRecordset->MoveNext(); } } catch (_com_error &e) { cout<<e.ErrorMessage()<<endl; }
//#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace //rename("EOF","adoEOF") void main() { CoInitialize(NULL);//初始化 Com 库 _ConnectionPtr pMyConnect=NULL;//对象指针 HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection));//将对象指针实例化 if(FAILED(hr)) { cout<<"_ConnectionPtr 对象指针实例化失败!"<<endl; return; }

vc 使用ado连接数据库的问题error c2059 语法错误 “l

vc 使用ado连接数据库的问题error c2059 语法错误  “l

VC 使用ADO连接数据库的问题!error C2059 语法错误“&lt;LVC 使用ADO连接数据库的问题!error C2059: 语法错误: “&lt;L_TYPE_raw&gt;”.2012-08-08 10:272006人阅读评论(1)收藏举报数据库cmicrosoftsystemincludemfc在stafx.h中添加#import "C:\Program Files\CommonFiles\System\ado\msado15.dll" no_namespacerename("EOF", "adoEOF")错误提示:1&gt;d:\documents\codes\ch15demo1\ch15demo1\debug\msado15.tlh(2373) : error C2059: 语法错误:“&lt;L_TYPE_raw&gt;”1&gt;d:\documents\codes\ch15demo1\ch15demo1\debug\msado 15.tlh(2373) : error C2238: 意外的标记位于“;”之前1&gt;d:\program files\microsoft visual studio9.0\vc\atlmfc\include\afxv_w32.h(16) : fatal error C1189:#error : WINDOWS.H already included. MFC apps must not #include &lt;windows.h&gt;解决办法如下:#import "c:\program files\commonfiles\system\ado\msado15.dll" named_guidsrename_namespace("ADOCG") rename("EOF", "EndOfFile") rename("BOF","FirstOfFile")using namespace ADOCG;添加到stafx.h的最后面上一篇CTime 使用总结下一篇优秀程序员的十个习惯。

力控使用ado读取关系库数据案例说明

力控使用ado读取关系库数据案例说明

1.关系库以存在D盘下access为例,其他sql和mysql等同理,只是在链接时不同。

脚本是一样的。

2.以表1内容为例。

字段名是时间,批号,温度,压力。

最新一条记录为批号为2,温度
30,压力40.
需求为用力控的数据库能读取到这些参数并且显示
3.操作步骤如下
3.1首先在力控建立三个空点位,分别用来和批号,温度,压力匹配的点位。

无需任何
关联,空点位即可。

3.2第二步,在后台组件添加一个ado组件,用来和dcom-副本.mdb连接上。

3.3点击测试,显示成功即可。

命名好数据源名称
3.4选择对应的库和表,点击确定
3.5ado右边有数据表管理,在数据表绑定新增一个,名称自取(后面脚本会用到)其中,字段名就是我们需要读取的表中的字段名,数据类型根据实际情况,后面的变量名是双击进入选择,浮点型就选xx.pv,字符型和日期选择XX.DESC。

如下图所示。

3.6脚本
在进入程序时打开数据库和数据表
在界面上做好点位关联和一个读取按钮。

后期读取按钮脚本会根据实际情况放到周期执行,这样就可以不停自动刷新数据。

4.效果
运行无数据
点击读取数据
到此完成。

注意事项:1.绑定ado表时千万不要写错字段名,否则读取不到
2.打开数据库脚本要放到进入程序,不要一直执行,执行一次即可。

3、此案例是按照时间来获取数据,当然也支持复杂的根据时间和判断批次号等条件同时成立去获取数据
4.获取不到数据,就仔细检查四个脚本的返回数值,看看哪一步出的错误。

是不是sql脚本没写对。

使用ADO.NET操作数据库

使用ADO.NET操作数据库
l 2.使用指定了查询字符串与连接的构造函数
–cmd = new OleDbCommand(strSQL, cn)
l 3.调用 Connection 对象的 CreateCommand 方法
•cmd = cn.CreateCommand(); mandText = strSQL;
2020/9/20
以图形化方式设置连接字符串
工具箱中***Connection控件建立连接 服务器资源管理器建立连接
2020/9/20
案例讲解 【案例8-1】使用Connection对象举例
2020/9/20
§8.3 使用对象
连接应用的对象模型
l 连接环境的典型场景 l 证券公司股票交易软件需要实时显示股票报价 l 银行软件需要实时查询货币汇率 l 工厂监控软件需要实时监控产品的产量和库存数量
2020/9/20
三、执行非连接环境下的数据库操作
DataSet是一种驻留内存的数据缓存,可以作为数 据的无连接关系视图。当应用程序查看和操纵DataSet中的数据时, DataSet没有必要与数据源一直保持连接状态。只有在从数据源读 取或向数据源写入数据时才使用数据库服务器资源,这种无连接 的架构可以使应用程序具有更大的可伸缩性。
2020/9/20
§8.2 .NET数据提供程序
1. .NET 数据提供程序的类型 1. SQL Server .NET 数据提供程序(内置) 2. OLE DB .NET 数据提供程序(内置) 3. ODBC .NET 数据提供程序 4. 其他数据提供程序(如 Oracle 数据提供程序)
2020/9/20
四种创建方式:
通过 DataAdapter “数据搬运工” 将数据从数据源搬运到 DataSet

mfc使用ado连接access数据库

mfc使用ado连接access数据库

1.设置数据源打开控制面板--->系统和安全--->管理工具--->ODBC Data Sources(32 bit)这里需要注意的是,vc6.0是32位的,因此这里的数据源也必须是32位的,否则是连接不上的,这里我使用的是ACCESS数据库,数据源的配置如下:2.创建包含数据库的MFC对话框(其它也可以)工程,新建ADOConn类在工程中我们需要新建一个普通类ADOConn然后在ADOConn类头文件中加入以下导入声明和变量、函数声明:ADOConn.h---------------------------------------------------------------------------------#import "c:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")//引入ADO库文件public:_ConnectionPtr m_pConnection;//连接对象指针_RecordsetPtr m_pRecordset;//记录集对象指针_CommandPtr m_pCommand;//命令对象指针ADOConn();virtual ~ADOConn();BOOL OnInitADOConn(CString Connstr);//初始化连接数据库BOOL ExecuteSQL(CString strSQL);//执行SQL语句BOOL ExecuteProc(CString ProcName);//执行存储过程BOOL GetCollect(CString FieldName,CString & strDest);//获得某个字段的值 BOOL GetRecordSet(CString strSQL);//获得记录集int GetRecordCount();//获得记录数//判断表TableName中是否存在字段KeyName的值为KeyValue的记录 BOOL RecordExist(CString TableName,CString KeyName,CString KeyValue); BOOL MoveFirst();//移动到第一条记录BOOL MoveNext();//移动到下一条记录BOOL Close();//关闭记录集BOOL CloseADOConnection();//关闭连接void dump_com_error(_com_error &e);//错误详细信息ADOConn.h---------------------------------------------------------------------------------然后在ADOConn类源文件中加入函数实现:ADOConn.cpp---------------------------------------------------------------------------------ADOConn::ADOConn()//构造函数{}ADOConn::~ADOConn()//析构函数{}BOOL ADOConn::OnInitADOConn(CString ConnStr)//初始化连接数据库{try{m_pRecordset.CreateInstance("ADODB.Recordest");m_pCommand.CreateInstance("mand");m_pConnection.CreateInstance("ADODB.Connection");_bstr_t strConnect=(_bstr_t)ConnStr;m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);AfxMessageBox("数据库连接成功");return true;}catch(_com_error e){AfxMessageBox("数据库连接失败");return false;}}BOOL ADOConn::ExecuteSQL(CString strSQL)//执行SQL语句{try{m_pConnection->BeginTrans();m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);m_pConnection->CommitTrans();return true;}catch(_com_error e){m_pConnection->RollbackTrans();AfxMessageBox("执行SQL语句失败");return false;}}BOOL ADOConn::ExecuteProc(CString ProcName)//执行存储过程{m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandText=_bstr_t(ProcName);m_pCommand->Execute(NULL,NULL,adCmdStoredProc);return true;}catch(_com_error e){AfxMessageBox("执行存储过程失败");return false;}}BOOL ADOConn::GetCollect(CString FieldName,CString & strDest)//获得某个字段的值{VARIANT vt;try{vt=m_pRecordset->GetCollect(_variant_t(FieldName));switch(vt.vt){case VT_BSTR:strDest=(LPCSTR)_bstr_t(vt);break;case VT_DECIMAL:strDest.Format("%d",vt.intVal);break;case VT_DATE:{DATE dt=vt.date;COleDateTime da=COleDateTime(dt);strDest.Format("%d-%d-%d %d: %d: %d",da.GetYear(),da.GetMonth(),da. GetDay(),da.GetHour(),da.GetMinute(),da.GetSecond());break;}case VT_NULL:strDest="";break;}return true;}catch(_com_error e){AfxMessageBox(e.ErrorMessage());return false;}return true;}BOOL ADOConn::GetRecordSet(CString strSQL)//获得记录集{m_pCommand->CommandText=(_bstr_t)strSQL;m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandType=adCmdText;m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdText);return true;}catch(_com_error e){AfxMessageBox("执行select语句失败");return false;}}int ADOConn::GetRecordCount()//获得记录数{DWORD nRows = 0;nRows=m_pRecordset->GetRecordCount();if(nRows==-1){nRows=0;if(m_pRecordset->adoEOF!=VARIANT_TRUE) m_pRecordset->MoveFirst();while(m_pRecordset->adoEOF!=VARIANT_TRUE){nRows++;m_pRecordset->MoveNext();}if(nRows>0)m_pRecordset->MoveFirst();}return nRows;}//判断表TableName中是否存在字段KeyName的值为KeyValue的记录BOOL ADOConn::RecordExist(CString TableName,CString KeyName,CString KeyValue) {CString countstr;countstr="select * from "+TableName+"where"+KeyName+"=\'"+KeyValue+"\'"; BOOL ret =GetRecordSet(countstr);if(ret){int ret2=GetRecordCount();if(ret2) return true;else return false;}else return false;}BOOL ADOConn::MoveFirst()//移动到第一条记录{try{m_pRecordset->MoveFirst();return true;}catch(_com_error e){AfxMessageBox("结果集移到第一个失败");return false;}}BOOL ADOConn::MoveNext()//移动到下一条记录{try{m_pRecordset->MoveNext();return true;}catch(_com_error e){AfxMessageBox("结果集移到下一个失败");return false;}}BOOL ADOConn::Close()//关闭记录集{try{m_pRecordset->Close();return true;}catch(_com_error e){AfxMessageBox("关系结果集失败");return false;}}BOOL ADOConn::CloseADOConnection()//关闭连接{try{if(m_pConnection->State){m_pConnection->Close();m_pConnection=NULL;return true;}else{AfxMessageBox("关闭数据库失败");return false;}}catch(_com_error e){AfxMessageBox("关闭数据库失败");return false;}}void ADOConn::dump_com_error(_com_error &e) //错误详细信息{CString ErrorStr;_bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());ErrorStr.Format( "/n/tADO Error/n/tCode = %08lx/n/tCode meaning= %s/n/tSource = %s/n/tDescription = %s/n/n",e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource,(LPCTSTR)bstrDescription );//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息::OutputDebugString((LPCTSTR)ErrorStr);#ifdef _DEBUGAfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);#endif}ADOConn.cpp---------------------------------------------------------------------------------3.编写代码连接数据库(这里我用的是ACCESS数据库)这里我们可以在任意.CPP(源文件)中声明ADOConn ado;然后在其他.CPP中使用的时候,只需要在头部加上extern ADOConn ado;当然,在定义的类中同样可以使用,举例如下:然后进行连接数据库的代码如下://进行数据库连接if(!AfxOleInit()){AfxMessageBox("OLE initialzation failed");return FALSE;}CString str="DSN=rapidquery";//这个字符串中的rapidquery就是我们之前设置的数据源的名称ado.OnInitADOConn(str);//调用dao对象去连接数据库,连接成功会提示,连接失败也会提示。

ADO数据库操作

ADO数据库操作

ADO数据库操作在ADO中,可以使用多种方式进行数据库操作,包括连接数据库、执行SQL语句、获取和修改数据等。

首先,连接数据库是使用ADO进行数据库操作的第一步。

可以使用ADO的Connection对象来创建与数据库的连接。

具体来说,需要提供数据库的连接字符串,包括数据库的类型、服务器地址、用户名、密码等信息。

通过ADO的Connection对象的Open方法,可以打开与数据库的连接。

在执行SQL语句后,可以使用Recordset对象获取查询结果。

Recordset对象是ADO中最常用的对象之一,它代表了一个包含数据的结果集。

通过Recordset对象的Open方法,可以执行SQL语句并得到结果集。

通过Recordset对象的GetRows和MoveNext方法,可以逐行获取查询结果,并对结果进行相应的操作。

在获取了查询结果后,可以对结果进行修改、添加或删除操作。

通过ADO的Recordset对象的AddNew方法可以添加一条新记录,然后使用Update方法将新记录保存到数据库中。

通过Recordset对象的Delete方法可以删除一条记录。

可以通过修改Recordset对象的字段值来更新数据库中的记录。

在完成数据库操作后,需要关闭与数据库的连接。

通过ADO的Connection对象的Close方法可以关闭与数据库的连接。

除了基本的数据库操作外,ADO还提供了一些高级功能,如事务处理、错误处理、数据缓存等。

可以使用ADO的Transaction对象来处理事务,通过处理ADO的Error对象来处理错误,通过设置Recordset对象的CacheSize属性来进行数据缓存。

总的来说,ADO提供了一种简单、灵活、高效的方式来进行数据库操作。

它是一种非常强大的数据库访问技术,广泛应用于各种开发平台和应用领域。

通过使用ADO,可以轻松地连接和操作各种类型的数据库,实现对数据的增删改查操作,以及其他高级功能的实现。

WINCC中使用ADO对象连接数据库-例子-常用属性-方法

WINCC中使用ADO对象连接数据库-例子-常用属性-方法

在WINCC中连接数据库可以使用ADO控件进行连接数据库,但是通常都不是用的ADO控件进行连接数据库,以下讲讲winccZ中使用ADO对象连接查询数据库.以下以报警记录为例.一、了解ADO对象1.1ADO对象操作数据库是微软提供的一种接口.1.2对ADO对象的访问使用CreateObject函数〔详情请参看CreateObject函数资料〕ADO组件的前缀是ADODB,所以访问的时候必须为ADODB.##<X代表对象〕eg:dim conn,oRs,oComSet conn = CreateObject<"ADODB.Connection"> 'Connection对象Set oRs = CreateObject<"ADODB.Recordset"> 'ADODB.Recordset对象Set oCom = CreateObject<"ADODB mand"> 'ADODB mand命令对象二、对象2.1 Connection 对象2.1.1 open 方法语法connection.Open ConnectionString,UserID,Password,OpengOptions说明ConnectionString:可选参数,字符串,包含连接信息UserID:可选参数,字符串,包含建立连接时候用的用户名Password:可选参数,字符串,包含建立连接时候用密码OpenOptions:可选参数,连接打开方式eg1:<连接数据库代码方法1,仅连接部分代码〕Dim connDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.ConnectionString ="Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"conn.CursorLocation = 3conn.Openeg2:〔连接数据代码方法2,连接部分代码〕Dim connDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.CursorLocation = 3conn.Open "Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"2.1.2 close方法connection.closeeg:Dim connDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.CursorLocation = 3conn.Open "Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"'这里写上对数据库查询,修改等操作conn.close2.1.3 execute方法语法Cn.Execute strCommand,[IngRowsAffected[,IngOptions]]说明strCommand:可以是查询语句、表名、存储过程名等IngRowsAffected:可选参数,返回Insert、Update 、Delete查询语句后所影响的数目IngOptiongs: 参数可以如下adCmdUnkown:Command类型未定,由数据源提供者去判断Command语法AdCmdFile:Command是和对象类型相应的文件名称adCmdStoredProc:Command是存储过程名称adCmdTable:Command是能产生内部SELECT*FROM TableName查询的表名称adCmdTableDirect:Command是能直接从表中获取行内容的表名称adCmdText:Command是一条SQL语句eg:Dim conn,oCom,oRsDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.CursorLocation = 3conn.Open "Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"Set oCom = CreateObject<"ADODB mand">Set oRs = CreateObject<"ADODB.Recordset">oCom mandType=1Set oCom.ActiveConnection = connoCom mandText ="ALARMVIEW:Select * FROM AlgViewCHT "Set oRs = oCom.Execute'以上4句还可以写成 Set oRs=conn.Execute<"ALARMVIEW:Select * FROM AlgViewCHT "> conn.close2.2 Recordset对象Recordset 常用属性RecordsetCount:返回当前记录的数目BOF:表示当前记录位于该对象第一个记录之前EOF:表示当前记录位于该对象最后一个记录之后.movefirst:移动到第一条movenext:移动到下一条movelast:移动到最后一条eg:Dim conn,oCom,oRsDim mDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.CursorLocation = 3conn.Open "Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"Set oRs = CreateObject<"ADODB.Recordset">Set oRs=conn.Execute<"ALARMVIEW:Select * FROM AlgViewCHT ">m = oRs.RecordCountmsgbox "报警行数"&mconn.close2.2.1 Open方法语法recordset.Open Source,ActiveConnection,CursorType,LockType,Options说明Source:可选参数,变体型,计算Command对象的变量名、SQL语句、表名、存储过程调用或持久的 Recordst文件名ActiveConnection:可选参数,变体型,计算有效Connection对象变量名或字符串,包含 ConnectionString参数CursorType:可选参数,用于确定数据提供者打开Recordset时应该使用游标类型,类型如下 adOpenForwardOnly:打开仅向前类型游标〔默认类型〕adOpenKeyset:打开键集类型游标adOpenDynamic:打开动态类型游标adOpenStatic:打开静态类型游标注:具体解释请参考百度结果,这里我们主要讲解应用方面的东西.LockType:可选参数,确定数据提供者打开Recordset时应该使用的锁定〔并发〕类型的LockTypeEnum 值,类型如下adLockReadOnly:只读,默认值adLockPessinistic:保守式锁定,提供者完成确保成功编辑记录所需的工作,通常通过在编辑时候锁定数据源的记录来完成.adLockOptimistic:开放式锁定,提供者试用开放式锁定,只在调用Update方法时才锁定记录.adLockBatchOptimistic:开放式批更新,用于批更新模式Optiongs:可选参数,长整型,用于指示数据提供者如何计算Source参数,或从以前保存的Recordset 中恢复Recordset<以下省略参数类型讲解〕eg:Dim conn,oRs,oComDim m,iDim tagDSNNameSet tagDSNName = HMIRuntime.Tags<"DatasourceNameRT">Set conn = CreateObject<"ADODB.Connection">conn.CursorLocation = 3conn.Open "Provider=WinCCOLEDBProvider.1;Catalog="&tagDSNName.Read&";Data Source=.\WinCC"Set oRs = CreateObject<"ADODB.Recordset">oRs.open "ALARMVIEW:Select * FROM AlgViewCHT ",connm = oRs.RecordCountMsgBox "报警行数"&moRs.Closeconn.Close2.3 Command对象2.3.1 对象属性说明ActiveConnection:使打开的数据库连接与Command对象关联CommandText:可执行的命令文本,如SQL语句CommandType:指定命令类型以优化性能CommandTimeout:设置提供者等待命令行的秒数以下摘自西门子连通性文档过程值记录集结构报警过程值归档:Set oRs = CreateObject<"ADODB.Recordset">Set oCom = CreateObject<"ADODB mand">oCom mandType = 1Set oCom.ActiveConnection = connoCom mandText = "TAG:R,'PVArchive\Tag1','0000-00-00 00:10:00.000','0000-00-00 00:00:00.000'"报警消息归档:Set oRs = CreateObject<"ADODB.Recordset">Set oCom = CreateObject<"ADODB mand">oCom mandType = 1Set oCom.ActiveConnection = connoCom mandText = "ALARMVIEW:Select * FROM AlgViewEnu"用户归档Set oRs = CreateObject<"ADODB.Recordset">Set oCom = CreateObject<"ADODB mand">oCom mandType = 1Set oCom.ActiveConnection = connoCom mandText = "SELECT * FROM UA#Test"关于数据集可参考《ConnectivityPackInfoSystem_zh-CHS》文档其中非常详细如果需要了解更多的方法,属性,请查阅ADODB手册上面非常的详细,本文并非专门讲解ADODB对象的文章而是重点在讲WINCC中如何使用方法,欢迎交流学习。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC运用ADO操作数据库一,数据库访问技术目前数据库接口问技术主要有DAO,RDO,ODBC,OLE DB和ADOODBC,开发数据库互连。

为数据库开发提供统一的接口,可以与任何具有ODBC驱动程序的数据库通信。

和其他数据库访问技术相比,属于比较底层的数据库接口。

只能和关心数据库进行通信,不能访问非关系数据库。

DAO,数据访问对象。

基于COM的面向对象数据库编程模型。

是一组基于Mircrosoft AccessJet引擎的COM自动化接口。

直接与Access/Jet数据库通信,通过Jet引擎也可以与其他数据库通信。

效率不高。

最初是作为ODBC API的抽象,为Visual Basic程序员提供的编程对象。

使用ODBC API对数据源进行操作。

不需要经过Jet引擎,比DAO效率高。

OLE DB,对象链接嵌入数据库。

未来数据库访问的发展模式。

提供COM接口,与其他数据库访问技术相比,具有更好的健壮性和灵活性,更高的容错能力。

属于底层访问技术。

可以与关系和非关系型数据库进行通信。

ADO,ActiveX Data Object。

对OLE DB的高层次封装。

简化了OLE DB,属于高层的数据库接口。

另外同OLE DB相比,能够使用ADO的编程语言更多。

ADO提供一个自动化接口,使VBScript和JavaScript等脚本语言可以使用ADO。

二,ADO访问基础1.引入ADO类型库在Stdafx.h中使用如下指令引入类型库:#import "c:\program files\common files\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")根据操作系统的不同,msado*.dll的版本不同,目前最高版本是 2.1吧。

rename("EOF","adoEOF")是为了防止和别的结束标示重名。

在编译过程中不用理会下面的编译警告:warning: unary minus operator applied to unsigned type, result still unsigned 如果不想此警告出现,可以在 StdAfx.h 文件中加入这样一行代码以禁止此警告: #pragma warning(disable:4146)对于指定ADO版本//如果使用 ADO 2.0 加入下面代码#import "C:\Program Files\Common Files\System\Ole DB\msdasc.dll" no_namespace//如果使用 ADO 2.1 加入下面代码#import "C:\Program Files\Common Files\System\Ole DB\oledb32.dll" no_namespace注:ADO2.0 或 ADO2.1 中,如果其中一个编译不成功,则用另一个2.初始化COM库一般中应用程序类初始化函数中初始化COM库,当然也可以在别的地方。

只要是在使用之前初始化就可以。

AfxOleInit(); // 初始化COM环境上面是MFC环境下注册COM的方法,如果非MFC环境使用方法如下:CoInitialize(NULL);CoUnInitialize();3.创建Connection对象并连接数据库针对链接数据库的方法主要有两种,静态链接和动态链接。

静态链接:_ConnectionPtrm_pConnection;在初始化函数中初始化它。

try{hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象if(SUCCEEDED(hr)){hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为 :Provider=Microsoft.Jet.OLEDB.3.51;}}catch(_com_error e)///捕捉异常{CStringerrormessage;errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息}//假设数据库名称test.mdb;数据源为test,下面使用不同的方法连接数据库使用ADO连接ACCESS2000数据库m_pConnection->Open("Provider=Mircrosoft.Jet.OLEDB.4.0;DataSource=test.mdb","","",adModeUnknown);使用ADO连接ACCESS97数据库m_pConnection->Open("Provider=Mircrosoft.Jet.OLEDB.3.51;DataSource=test.mdb","","",adModeUnKnown);使用DSN数据源对任何支持ODBC的数据库进行连接m_pConnection->Open("Data Source=test;UID=sa;PWD=","","",adModeUnknown);不通过数据源对SQL SERVER数据库进行连接m_pConnection->Open("driver={SQLSERVER};Server=127.0.0.1;DATABASE=TEST;UID=sa;PWD=","","",adModeUnknown);设置数据库连接超时,需要在Open之前调用m_pConnection->ConnectionTimeOut = 30;//秒动态链接:HRESULT hr;IDataSourceLocatorPtrdlPrompt=NULL;_RecordsetPtrrs=NULL;try{// 初始化DataLinks对象hr=dlPrompt.CreateInstance(__uuidof(DataLinks));if(FAILED(hr))throw(_com_error(hr,NULL));// 建立连接pConn=dlPrompt->PromptNew();// 如果 conn 为 NULLif(pConn==NULL)return;// 打开连接pConn->Open(pConn->ConnectionString,L"",L"",-1);// 清除列表框while(m_tblList.GetCount()>0)m_tblList.DeleteString(0);// 获取数据库中表集rs=pConn->OpenSchema(adSchemaTables);while(!rs->adoEOF){m_tblList.AddString((char*)(_bstr_t)rs->Fields->Item[L"TABLE_NAME"]->Value); rs->MoveNext();}rs=NULL;dlPrompt.Release();}catch (_com_error&e){AfxMessageBox(e.ErrorMessage());}需要注意的是,在建立工程时,要选上Automation选项。

(具体情况看)三,ADO的数据操作1.Recordset对象操作数据Recordset对象是操作数据最简单的方法,也比较直接,特别可以直接用SQL语句来进行操作。

我本人也最常用Recordset对象。

_RecordsetPtrm_pRecordset;m_pRecordset.CreateInstance("ADODB.Recordset");或者直接写成:_RecordsetPtrpRecordset ("ADODB.Recordset");也可以这样写:_RecordsetPtrpRecordset;pRecordset.CreateInstance(__uuidof(_Recordset));注意,如果变量是一个类的实例则用"."操作符,若是一个指向实例的指针则应使用"->"操作符。

一个变量能通过两种方式被使用。

因为"->"操作符被重载,允许一个对象实例类似一个接口指针那样被使用;"->"操作符返回该指针;而由这个返回的指针访问_Recordset对象的成员。

如下代码,获得表中所有记录到Recordset对象CStringstrSQL = "select * from student";m_pRecordset->Open(strSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);第一个参数是要执行的SQL字符串,第二个是活动连接第三个参数是光标类型。

可以取如下值adOpenUnspecified = -1,///不作特别指定adOpenForwardOnly = 0,///前滚静态光标。

这种光标只能向前浏览记录集,比如用MoveNext 向前滚动,这种方式可以提高浏览速度。

但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。

adOpenDynamic = 2,///动态光标。

相关文档
最新文档