VC与ADO数据库操作7页
VC中使用ADO的方法
VC中使⽤ADO的⽅法ADO中打开⼀个连接:pConnection->ConnectionString = "这⾥的字符串有下⾯四种写法"; //对连接字符串赋值pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库第⼆三个参数分别为⽤户的ID与密码,因为在连接字符串ConnectionCstring中已经设置好了,这⾥可以为空。
第四个参数可以取下⾯两个参数:adAsyncConnect,异步打开数据库,在ASP中直接⽤16。
adConnectUnspecified,同步打开数据库,在ASP中直接⽤-1。
ConnectionString根据不同的数据源,分别对应不同的写法(要记下来很困难,可以在VB中利⽤ADO控件先连接好,再将其拷贝在VC中,这样不容易出错) 1)访问Access 2000 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord" 2)访问ODBC数据 "Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 3)访问Oracle数据库 “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;" 4)访问MS SQL数据库 "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;" 使⽤ADO开发应⽤程序有两种⽅法,⼀种是直接在应⽤程序中使⽤ADO数据控件,该⽅法最简单,⽆需编写⼀⾏代码即可实现对数据库的访问,另⼀种⽅法是直接使⽤ADO对象实现对数据库的操作,该⽅法较复杂,但可以让程序员更深⼊的控制数据库。
ADO操作数据库的方法步骤
ADO操作数据库的方法步骤ADO(ActiveX Data Objects)是一种用于操作数据库的技术,它提供了一组对象和方法,可以有效地与数据库进行交互。
ADO是使用OLE DB (Object Linking and Embedding Database)技术来实现的,它可以连接多种不同的数据库,包括SQL Server、Oracle、Access等。
下面是使用ADO操作数据库的方法步骤。
1.引用ADO库要使用ADO操作数据库,首先需要在项目中引用ADO库。
可以在编程环境中的“引用”或者“项目属性”中添加对ADO库的引用,确保可以使用ADO库提供的对象和方法。
2.创建连接对象创建一个ADO连接对象以连接到数据库。
连接对象是ADO的核心对象之一,它提供了与数据库建立连接和断开连接的功能。
可以使用Connection对象的构造函数或者使用CreateObject函数创建一个连接对象。
3.打开连接使用连接对象的Open方法来打开连接。
在打开连接之前,需要设置连接字符串(Connection String),连接字符串包含了连接数据库的详细信息,比如数据库的类型、服务器地址、用户名、密码等。
可以使用连接字符串构造函数或者直接设置连接对象的ConnectionString属性来设置连接字符串。
4.创建命令对象5.设置命令类型和SQL语句6.执行命令使用命令对象的Execute方法来执行命令。
如果SQL语句是查询语句,可以使用命令对象的Execute方法或者ExecuteReader方法执行命令,并使用记录集对象来获取返回的数据。
如果SQL语句是更新、插入或删除语句,可以使用ExecuteNonQuery方法来执行命令,该方法返回受影响的行数。
7.处理返回的数据如果执行的是查询语句,可以使用记录集对象来获取返回的数据。
可以使用记录集对象的MoveFirst方法将指针移动到第一条记录,然后使用各种属性和方法来访问记录集中的数据,比如Fields,RecordCount,EOF等。
数据库操作-VC+ADO常用操作的示例
VC中利用ADO共同实现数据库的操作(以修正其中的错误)ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是ADO的主要优势。
ADO 是一套用自动化技术建立起来的对象层次结构,它比其他的一些对象模型如DAO(Data Access Object)、RDO(Remote Data Object)等具有更好的灵活性,使用更为方便,并且访问数据的效率更高。
SQL是强大的数据库操作系统,通过ADO和SQL语句的配合,我们可以的实现对数据库的一系列操作,例如创建数据库、创建表、创建索引,实现数据库的多重查询、高级查询和数据的汇总等技术。
下面通过例程介绍如何通过ADO和SQL语句的配合实现对数据库的操作。
第一步:通过Access创建数据库test.mdb。
第二步:创建单文档工程testado,所有的选项都取默认值。
第三步:COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:BOOL CADOTest1App::InitInstance(){AfxOleInit();......第四步:用#import指令引入ADO类型库我们在stdafx.h中加入如下语句:#import "c:\program files\common files\system\ado\msado15.dll"no_namespace rename("EOF","adoEOF")这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
第五步:在testadoview.h中定义一个指向Connection对象的指针:_ConnectionPtr m_pConnection;第六步:添加如下代码:void CTestadoView::OnInitialUpdate(){CView::OnInitialUpdate();HRESULT hr;try{hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象if(SUCCEEDED(hr)){hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=test.mdb","","",adModeUnknown);///连接数据库///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }}}catch(_com_error e)///捕捉异常{CString errormessage;errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息}}第七步:在析构函数中关闭Connection对象并将其释放,代码如下:CTestadoView::~CTestadoView(){m_pConnection->Close();m_pConnection.Release();}第八步:添加菜单项"创建数据库表",并添加相应的消息处理函数,然后添加代码如下:void CTestadoView::OnAddtable(){_variant_t RecordsAffected;m_pConnection->Execute("CREATE TABLE new(ID INTEGER,username TEXT,old INTEGER)",&RecordsAffected,adCmdText);}运行程序,执行菜单当中的命令"添加表",我们可以发现数据库中已经添加了一个表new,其中的字段有我们定义的字段。
使用C_和ADONET操作数据库
2012年7月27日星期五
下面的程序对Orders表执行了更新并做了查询。
using System; using System.Data; using System.Data.SqlClient; public class myDataAccess { public static void Main(){ SqlConnection conn = new SqlConnection("Server=localhost; Database=Northwind;User ID=sa;PWD=sa"); SqlCommand cmd = new SqlCommand("update [Orders] set [OrderDate]='2004-9-1' where OrderID]=10248",conn); try { conn.Open(); int I = cmd.ExecuteNonQuery(); Console.WriteLine(i.ToString() + " rows affected by UPDATE"); mandText = "select * from [Orders]"; i = cmd.ExecuteNonQuery(); Console.WriteLine(i.ToString() + " rows affected by SELECT"); }
下面的例子创建一个 SqlConnection并设置它的一些属性。
public void CreateSqlConnection() { SqlConnection myConnection = new SqlConnection(); myConnection.ConnectionString="Persist Security Info=False;” + “Integrated Security=SSPI;database=northwind;” + “server=mySQLServer;Connect Timeout=30"; myConnection.Open(); }
Visual C ADO数据库编程入门
Visual C ADO数据库编程入门ADO 是目前在Windows环境中比较流行的客户端数据库编程技术。
ADO是建立在OLE DB底层技术之上的高级编程接口,因而它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等等)和极其简单、易用的编程接口,因而得到了广泛的应用。
而且按微软公司的意图,OLE DB和ADO将逐步取代ODBC和DAO。
现在介绍ADO各种应用的文章和书籍有很多,本文着重站在初学者的角度,简要探讨一下在VC++中使用ADO编程时的一些问题。
我们希望阅读本文之前,您对ADO技术的基本原理有一些了解。
一、在VC++中使用ADO编程ADO实际上就是由一组Automation对象构成的组件,因此可以象使用其它任何Automation对象一样使用ADO。
ADO中最重要的对象有三个:Connection、Command和R ecordset,它们分别表示连接对象、命令对象和记录集对象。
如果您熟悉使用MFC中的ODBC类(CD atabase、CRecordset)编程,那么学习ADO编程就十分容易了。
使用ADO编程时可以采用以下三种之一:1、使用预处理指令#import#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \no_namespace rename("EOF", "EndOfFile")但要注意不能放在stdAfx.h文件的开头,而应该放在所有include指令的后面。
否则在编译时会出错。
程序在编译过程中,VC++会读出msado15.dll中的类型库信息,自动产生两个该类型库的头文件和实现文件msado15.tlh和msado15.tli(在您的Debug或Release目录下)。
在这两个文件里定义了ADO的所有对象和,以及一些枚举型的常量等。
VC中使用ADO控件的基本功能
VC中使用ADO控件的基本功能ADO(ActiveX Data Objects)是一组可以访问数据库的组件,它提供了一种统一的接口,允许开发者使用不同的编程语言对各种类型的数据存储进行访问和操作。
在VC中使用ADO控件可以方便地进行数据库操作,本文将介绍ADO的基本功能及相关用法。
1.引入ADO库在VC项目中使用ADO之前,首先需要引入ADO库。
可以通过以下步骤引入ADO库:a)打开VC中的项目;b)选择“项目”->“属性”;c)在属性对话框中选择“配置属性”->“常规”->“使用MFC”;d)在“使用MFC”中选择“使用共享DLL”,并点击“应用”;e)在属性对话框中选择“配置属性”->“链接器”->“输入”;f) 在“附加依赖项”中加入“odbc32.lib”和“odbccp32.lib”;g)点击“应用”和“确定”。
2.连接数据库使用ADO控件前,需要建立与数据库的连接。
连接数据库常用的一种方法是使用连接字符串。
连接字符串是一串字符,包含了数据库的相关信息,如数据库类型、地址、用户名、密码等。
可以使用以下代码建立与数据库的连接:```cpp#include <windows.h>void ConnectToDatabase_ConnectionPtr pConn;HRESULT hr = pConn.CreateInstance(__uuidof(Connection));if (SUCCEEDED(hr))_bstr_t connStr = "Provider=SQLOLEDB;DataSource=YourServerName;Initial Catalog=YourDatabaseName;UserId=YourUserId;Password=YourPassword;";hr = pConn->Open(connStr, "", "", adConnectUnspecified);if (SUCCEEDED(hr))//连接成功,可以进行数据库操作}}```在代码中,使用_ConnectionPtr表示连接对象,CreateInstance函数创建连接对象的实例,并使用Open函数打开数据库连接。
使用ADO操作数据库
使用ADO操作数据库ADO (ActiveX Data Objects) 是一种用于访问数据库的编程技术,它是微软开发的一种组件对象模型(COM)。
ADO 提供了一种统一的方法来访问各种类型的数据源,如关系数据库、Excel 表格、文本文件等。
通过使用 ADO,开发人员可以简化数据库操作,并提高代码的可重复性和可维护性。
ADO 可以在许多编程环境中使用,如 Visual Basic、ASP、C++等,并且可以与不同的数据库进行交互,如 SQL Server、Oracle、MySQL等。
ADO 使用了一种层次化的模型来表示数据库,即连接、命令、记录集和字段。
下面将详细介绍如何使用 ADO 进行数据库操作。
首先,我们需要建立与数据库的连接。
在 ADO 中,可以使用Connection 对象来实现。
连接字符串是连接到数据库所需的关键信息。
例如,在连接到 SQL Server 数据库时,连接字符串通常包含服务器名称、数据库名称、用户名和密码等信息。
以下是一个示例连接字符串的格式:```Provider=SQLOLEDB;Data Source=ServerName;InitialCatalog=DatabaseName;User ID=UserName;Password=Password;```接下来,使用 Connection 对象打开与数据库的连接:```vbDim conn As New ADODB.Connectionconn.Open "连接字符串"``````vbcmd.ActiveConnection = conn```在执行命令之前,我们需要创建一个 Recordset 对象来存储查询结果。
Recordset 对象可以看作是一个二维表,其中包含了从数据库中返回的数据。
以下是创建 Recordset 对象的代码:```vbDim rs As New ADODB.Recordsetrs.Open cmd, , adOpenStatic, adLockReadOnly```在获取了数据库查询结果后,我们可以使用 rs 对象来访问这些数据。
ADO数据库操作
ADO数据库操作在ADO(ActiveX Data Objects)中,可以使用各种方法和属性来执行数据库操作。
ADO是一种在Microsoft平台上用于访问数据的技术,可以用于连接到各种数据库系统,包括Microsoft Access、SQL Server、Oracle等。
首先,要使用ADO进行数据库操作,我们需要建立与数据库的连接。
可以使用ADO的Connection对象来实现。
例如,对于Microsoft Access 数据库,可以使用以下代码来建立连接:```Dim conn As New ADODB.Connectionconn.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\path\to\database.mdb"conn.Open```在上面的代码中,我们创建了一个Connection对象,并设置了连接字符串来指定数据库的路径。
然后,我们调用Open方法来打开连接。
建立连接后,就可以执行各种数据库操作了。
以下是一些常见的数据库操作方法:1.执行SQL查询:```Dim rs As New ADODB.Recordsetrs.Open "SELECT * FROM table", conn```上面的代码中,我们创建了一个Recordset对象,并使用Open方法执行了一个SQL查询。
2.插入记录:```conn.Execute "INSERT INTO table (field1, field2) VALUES ('value1', 'value2')"```上面的代码中,我们使用Execute方法执行了一个插入记录的SQL语句。
3.更新记录:```conn.Execute "UPDATE table SET field1 = 'new value' WHERE condition"```上面的代码中,我们使用Execute方法执行了一个更新记录的SQL语句。
VC开发数据库原理之ADO篇_20120425
VC++使用ADO开发ACCESS数据库作者:韩耀旭本文通过实例演示如何在VC++中使用ADO进行ACCESS数据库编程,并对涉及到的几个概念进行详细解释。
本文不对ADO和ACCESS的基本概念进行详细解释,主要包括以下内容:第一部分 ADO和ADOX到底是什么,二者的作用和区别建立数据库第二部分 ADOX创建ACCESS数据库第三部分ADO创建ACCESS数据库的表第四部分使用_ConnectionPtr接口开发ACCESS数据库第五部分使用_RecordsetPtr接口开发ACCESS数据库第一部分ADO和ADOX到底是什么,二者的作用和区别ADO是Microsoft 最新推出的数据库访问的高层软件接口。
它和Microsoft 以前的数据库访问接口DAO、RDO相比具有更大的灵活性,使用也更方便,开发效率大为提高。
ADOX是核心ADO对象的扩展库。
它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。
要使用ADOX,则应建立对ADOX类型库的引用。
ADOX 库文件名为 Msadox.dll。
通俗地讲,ADO是访问数据库的一种接口,可以使用它方便地进行数据库编程。
而ADOX是微软对ADO功能的扩展,比如:可以ADOX创建数据库(而ADO 没有创建数据库的功能)。
第二部分ADOX创建ACCESS数据库用ADOX创建access数据库方法很简单,只需要创建一个Catalog对象,然后调用它的Create方法就可以了。
例程ADOXCreateDatabase演示如何使用ADOX创建一个ACCESS数据库。
打开VC++ 6.0,新建一个基于对话框的工程ADOXCreateDatabase。
在对话框IDD_ADOXCREATEDATABASE_DIALOG中添加一个编辑框IDC_DBNAME和一个按钮IDC_BTN_CREATE,编辑框用以输入数据库名称。
使用ClassWizard给编辑框创建一个CString变量m_dbName。
在VC++中使用ADO
在VC++中使用ADO访问Access数据库摘要ADO具有易于使用、速度快、内存支出少和磁盘痕迹小的有点。
并且提供了轻量高性能的接口。
ADO(ActiveEx Data Object)是Microsoft数据库应用程序开发接口,是建立在OLE DB之上的高层数据访问技术。
即使我们对OLE DB 和COM不了解,也能轻松使用ADO,因为它非常的简单易用,甚至比以前的ODBC API、DAO都要容易使用,并不适灵活性。
同时它也提供了多语言访问技术包括Visual C++,Visual Basic和VBA等。
使用ADO编程一般有以下几个步骤组成:(1)连接到一个数据源;(2)打开指定的数据集;(3)执行所需的查询;(4)把数据检索到一个能够在C++代码中很容易访问的对象中;(5)提供检测错误的一般方法。
2.ADO对象的详细介绍如下表:使用Command对象查询数据库并返回 Recordset 对象中的记录,以便执行大量操作或处理数据库结构。
可以使用Command对象的集合、方法、属性进行下列操作:∙使用CommandText属性定义命令(例如,SQL 语句)的可执行文本。
∙通过Parameter对象和Parameters集合定义参数化查询或存储过程参数。
∙可使用Execute方法执行命令并在适当的时候返回Recordset对象。
∙执行前应使用CommandType属性指定命令类型以优化性能。
∙使用Prepared属性决定提供者是否在执行前保存准备好(或编译好)的命令版本。
∙使用CommandTimeout属性设置提供者等待命令执行的秒数。
∙通过设置ActiveConnection属性使打开的连接与Command 对象关联。
∙设置Name属性将Command标识为与Connection对象关联的方法。
∙将Command对象传送给Recordset的Source属性以便获取数据。
注意如果不想使用Command对象执行查询,请将查询字符串传送给Connection对象的Execute方法或Recordset对象的Open方法。
基于ADO方式的VC++数据库访问技术介绍
基于ADO方式的VC++数据库访问技术介绍一、ADO概述我们先介绍一下ADO,让大家对ADO有个大概的了解。
ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的使用程序层接口。
ADO 使您能够编写使用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。
和ODBC相比,ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小及可移植性好。
下面我们结合具体的例子给大家讲解VC++中ADO是如何对数据库进行操作的。
二、系统设计本系统主要由用户登陆模块、用户操作界面模块和管理模块构成。
实现生物医学工程学生信息的管理。
三、建立数据库和数据表我们用Microsoft Office 2003中的Microsoft Access 2003来进行数据库和数据表的创建工作。
1、建立“shengyi”数据库(1)启动Microsoft Office 2000中的Microsoft Access 2000使用程序,再出现的对话框中创建一个新的数据库或打开一个已经存在的数据库。
(2)选择创建新数据库,即选择“空Access 数据库”选项。
(3)单击“确定”按钮后出现保存对话框,确定保存数据库的文件位置,将数据库命名为:shengyi。
(4)在数据表设计界面中,用户可以打开已经存在的数据表,也可以创建新的数据表。
单击“设计”菜单项,出现数据表设计器,用户可以设计一个新的数据表结构。
2、分别建立用户登陆表、年级表、学生个人信息表,如图1图1(1)class数据表的结构如图2图2(2)denglu数据表的结构如图3图3(3)personal数据表的结构如图4图4创建完成后可以在数据表中输入一些数据。
以在后面的登陆系统界面中体现其效果。
四、ADO和数据库的连接具体的建立过程相信大家都已经知道了,这里我们就不再详述了。
本系统建立的是但文档类型,工程名称为sheng。
1、引入ADO库文件使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import 引入ADO库文件,以使编译器能正确编译。
VC 使用ADO连接数据库
一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。
ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。
ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。
之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。
OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。
OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。
OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。
也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。
在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。
但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。
您需要的API 应该是一座连接应用程序和OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。
二、在VC中使用ADO(开发步骤如下:)1、引入ADO库文件使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。
代码如下所示://用#import引入ADO库文件#import "c:\program files\common files\system\ado\msado15.dll" \no_namespaces \rename("EOF" adoEOF")这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。
VC用ADO打开和关闭数据库
VC用ADO打开和关闭数据库初始化:1.找到"stdafx.h"文件,并添加代码:#import "C:\WINDOWS\system32\msado15.dll" \no_namespace \rename ("EOF", "adoEOF")解释:"EOF"-"End Of Line"即是否为数据库的最后一行。
2.在"Dlg.h"文件中进行对象定义:public:_ConnectionPtr m_Connection; //连接数据库_RecordsetPtr m_pRecordset; //记录集解释:“m_Connection”负责数据库连接的操作,以及使用m_Connection.Execute()等操作;“m_pRecordset”负责进行数据集的绑定,一般使用为m_pRecordset.Open()等操作;3.在"Dlg.cpp"找到"OnInitDialog()"函数,并添加代码如下:SetIcon(m_hIcon, FALSE); // 设置小图标///数据库初始化部分::CoInitialize(NULL); //初始化COM环境,只在对话框建立的时候才进行HRESULT hr;try{hr = m_Connection.CreateInstance("ADODB.Connection"); //初始化Connection对象实例,不随时释放if(SUCCEEDED(hr)){hr = m_Connection->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDBAccess.mdb",L"",L"",adModeUnknown);}m_pRecordset.CreateInstance("ADODB.Recordset"); //初始化对象数据集,不随时释放m_pRecordset->Open("SELECT * FROM 雇员",m_Connection.GetInterfacePtr(),adOpenDynamic,adLockOptim istic,adCmdText); //随时可以使用m_pRecordset->Close()进行关闭}catch(_com_error &e){CString errormessage;errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);///显示错误信息}解释:::CoInitialize(NULL); -- 进行COM口的初始化,非常重要的一步;m_Connection.CreateInstance("ADODB.Connection"); --实例化"连接";m_Connection->Open(); --打开连接;m_pRecordset.CreateInstance("ADODB.Recordset"); --实例化"数据集";m_pRecordset->Open(); --绑定数据集4.在"WM_CLOSE"对应的"OnClose()"函数中进行"释放"操作:m_pRecordset->Close();m_Connection->Close();::CoUninitialize(); //关闭COM环境CDialog::OnClose();解释:之所以将这部分归结到初始化中,原因在于此部分实在是很重要,并且容易遗忘,一旦忽略此部分,系统将持续报错.(关闭连接,关闭数据集,关闭COM环境)到此为止,整个的初始化部分就完成了摘自踏雪无痕的专栏。
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()来捕获错误信息,// 因为它有时会经常出现一些意想不到的错误。
使用ADO操作数据库
使用ADO操作数据库ADO可以被用在许多不同的编程环境中,包括Visual Basic、C++、C#、ASP等。
使用ADO来操作数据库,首先需要建立数据库连接。
ADO提供了各种类型的连接对象(Connection Object)来访问不同类型的数据库,包括SQL Server、Oracle、MySQL等。
建立ADO数据库连接的基本步骤如下:1. 创建Connection对象。
2. 设置Connection对象的ConnectionString属性,指定连接字符串,包括数据库的服务器地址、用户名、密码等信息。
3. 调用Connection对象的Open方法,打开数据库连接。
连接字符串是一个包含各种参数和值的字符串,用于指定连接数据库所需的信息。
连接字符串的格式和内容根据使用的数据库类型而有所不同,下面是一个连接SQL Server数据库的示例连接字符串:"Provider=SQLOLEDB;Data Source=server_name;InitialCatalog=database_name;User ID=user_name;Password=password"执行SQL语句的基本步骤如下:ADO还提供了DataReader对象和Recordset对象来处理查询结果。
DataReader对象逐行读取查询结果,适用于一次性读取大量数据。
Recordset对象将查询结果存储在内存中,可以通过MoveNext方法逐行遍历结果。
使用DataReader对象读取查询结果的基本步骤如下:1. 执行查询语句,并将结果保存在DataReader对象中。
2. 使用DataReader对象的Read方法逐行读取结果。
3. 使用DataReader对象的GetString、GetInt32等方法获取每行数据的值。
使用Recordset对象处理查询结果的基本步骤如下:1. 执行查询语句,并将结果保存在Recordset对象中。
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,可以轻松地连接和操作各种类型的数据库,实现对数据的增删改查操作,以及其他高级功能的实现。
VC中使用ADO进行数据库开发的一些资料的整理
VC中使用ADO进行数据库开发的一些资料的整理1.导入ado库在StdAfx.h中,加入如下代码#import "c:\program files\common files\system\ado\msado15.dll" \no_namespace rename("EOF","adoEOF") renam e("BOF","adoBOF") 初试化在app的InitInstance中,加入AfxOleInit();(MFC)或者CoInitialize(NULL)如果用了CoInitialize退出时,要调用CoUninitialize()注意,如果在线程中也使用了com,那么在线程中也要用CoInitialize初始3.连接数据库_ConnectionPtr m_pAppConn;hResult = m_pAppConn.CreateInstance(_T("ADODB.Connection"));///创建Connection对象然后连接之m_pAppConn->Open("Provider=Microsoft.Jet.OLEDB.4.0 ; \Data Source = .\\DataBase\\aa.mdb","","",adModeUnknown);BOOL OpenConnect(){HRESULT hResult;CloseConnect();try{hResult = m_pAppConn.CreateInstance(_T("ADODB.Connection"));///创建Connection对象 if(SUCCEEDED(hResult)){m_pAppConn->Open("Provider=Microsoft.Jet.OLEDB.4.0 ; \Data Source = .\\DataBase\\aa.mdb","","",adModeUnknown);}}catch(_com_error e)///捕捉异常{CString errormessage;errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage()); AfxMessageBox(errormessage);hResult = -1L;}return (SUCCEEDED(hResult) ? TRUE : FALSE);}这里连接的数据库是access数据库,在工程目录下的DataBase\aa.mdb关键连接的字符窜,如果是accessProvider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.1.1\DataBase\aa.mdb; 这是局域网上的文件Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\DataBase\\aa.mdb;本机上的如果是sql 2000Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=sa;Initial Catalog=aa;Data Source=192.168.1.1;数据库在192.168.1.1上,数据库名字是aa4.关闭连接BOOL CloseConnect(){HRESULT hResult=0;try{if(m_pAppConn!=NULL){if(m_pAppConn->State!=adStateClosed){hResult=m_pAppConn->Close();}m_pAppConn.Release();}}catch(_com_error e){_bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());TRACE(_T("\n Source : %s \n Description : %s\n"),(LPCSTR)bstrSource,(LPCSTR)bstrDescription);hResult=-1L;}return (SUCCEEDED(hResult) ? TRUE : FALSE);}5.使用recodeset打开记录_variant_t RecordsAffected;_RecordsetPtr pRecordset = NULL;strSql = _T("SELECT field FROM table");pRecordset.CreateInstance(_uuidof(Recordset));pRecordset = pConn->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown); 其中&RecordsAffected 可以获得有多少记录返回,这是记录的影像数目6.关闭记录集if(pRecordset != NULL && pRecordset->State){pRecordset->Close();pRecordset = NULL;}7.判断是否为空if (pRecordset->adoBOF && pRecordset->adoEOF) {//MessageBox("没有符合条件的记录存在!","提示");if(pRecordset != NULL && pRecordset->State){pRecordset->Close();pRecordset = NULL;}return;}8,从记录集取数据_variant_t var;pRecordset->MoveFirst();for(;!pRecordset->adoEOF;pRecordset->MoveNext()) {var = pRecordset->GetCollect(_T("field"));}9.几种常见数据的转换如果是字符窜的字段var = pRecordset->GetCollect(_T("field"));if(var.vt!=VT_NULL){str= (LPCTSTR)_bstr_t(var);}if(var.vt!=VT_NULL)判断是必须的,如果是空,转换会出错如果是int形int aa = atoi(str)_variant_t是个可变类型,支持很多种类型,10.使用command利用Command对象来执行SQL命令_CommandPtr m_pCommand;m_pCommand.CreateInstance("mand");_variant_t vNULL;vNULL.vt = VT_ERROR;vNULL.scode = DISP_E_PARAMNOTFOUND;///定义为无参数m_pCommand->ActiveConnection = m_pConnection;///非常关键的一句,将建立的连接赋值给它m_pCommand->CommandText = "SELECT * FROM users";///命令字串m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///执行命令,取得记录集如果使用记录集的open来打开command对象.如果在Source 参数中传送 Command 对象并且同时传递ActiveConnection 参数,那么将产生错误。
vs或vc使用ado连接数据库WIN7平台问题
现象最近使用vs2008编译程序,使用ado连接oracle数据库。
在WIN7环境下代码编译并链接成功,生成exe,放到目标机器window2003 server中运行,数据库连接失败(页WIN7机器上安装的数据库,调试时却连接正常)。
原因过程的分析比较曲折,长话短说。
曾经怀疑过oracle版本问题,因win7上安装的是11g,而目标机器上是10g client。
但是将win7系统上11g卸载干净后,程序依然能编译链接,可见程序的编译链接根本不依赖oracle数据库,但是生成的exe依旧不能在目标机器上正常连接数据库。
于是将问题聚焦在msado15.dll上来,因为这是程序连接数据库唯一依赖的动态库。
拿win7与win2003 server系统的两个msado15.dll文件比较,结果如下(左边为2003版,右边为win7版):验证经过以上的原因分析,自然的想到两个解决办法:1.将2003版的msado15.dll拷贝到编译机器上,重新build。
2.将win7上build好的exe连同win7版的msado15.dll一同放到目标机器上,但需要卸载目标机器自带的msado15.dll,并重新注册win7版的。
以上两种办法,第一种验证成功,第二种办法没有实现,由于目标机器上的msado15.dll 不太容易卸载,而且卸载后极有可能会引发其他程序或系统问题。
解决办法采用以上验证的第一种方法,安全可靠。
三个步骤:1.到目标机器上拷贝一个msado15.dll到win7环境的任意目录(C:\ProgramFiles\Common Files\System\ado除外,因为系统默认目录在此,即使删除或替换,系统仍会自动生成)。
2.在vs中修改stdafx.h文件,将#import"C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")修改为:#import "C:\msado15.dll" no_namespace rename("EOF", "adoEOF")3.重新build后,生成exe即可在目标机器2003上运行并连接数据库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC与ADO数据库操作学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了。
重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的!一、ADO简介ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO都要容易使用,【1】为工程做准备建一个基于对话框的工程,名字叫PlaceName。
加入一个ListControl控件,ID改成IDC_RESULT,顺便点一下Styles选项卡,把View改成Report,你可以看到对话框里的ListControl控件的样子已经变成带字段名的报表格式了。
右击它,用ClassWizard添加成员变量,名字为m_LisCtrlResult。
按照上面的程序界面,加入一个编辑框(输入SQL语句用的),同上面添加m_LisCtrlResult 成员变量一样,加入一个CString变量,名字为m_SqlText,还有一个“查询”按钮,把它叫为Query,双击它一下,VC会自动为它加入消息和函数的,名字也叫OnQuery(),等一下我们就用着那个函数的。
看到我们SpaceSoft的标志不?把你的照片换成BMP格式的,放上去吧!定义一下要用着的变量:class CPlaceNameDlg : public CDialog// Constructionpublic:_RecordsetPtr m_pRecordset; //定义一个RecordsetPtr对象,用来储存读出来的表HRESULT hr; //查出后的表Fields* fields; //储存查出后的字段BSTR bstrColName; //储存一下字段名long nRstCol; //SQL语句一共查出了几个字段?nRstCol个!CString strColName[100]; //把查出的字段名转换成常见常用的CString类型,放在这个数组里边//储存从数据库读出的数据,variant 变量能够存储所有系统定义类型的数据。
【2】COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:BOOL CPlaceNameApp::InitInstance()AfxOleInit();【3】用#import指令引入ADO类型库我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到)#import "c:\program files\commonfiles\system\ado\msado15.dll" no_namespacerename("EOF","adoEOF")这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
几点说明:(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus oper ator applied to unsigned type, result still unsigned【4】创建Connection对象并连接数据库首先我们需要添加一个指向Connection对象的指针,就是在PlaceName.h里加入下面一句,定义它:_ConnectionPtr m_pConnection; //前面带“_”的语句一般是VC 本来没有的东西,是外来的下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。
BOOL CPlaceNameApp::InitInstance()AfxEnableControlContainer();AfxOleInit(); //使用OLE对象时,须加这一句HRESULT hr;tryhr = m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象if(SUCCEEDED(hr))hr = m_pConnection->Open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source= placename.mdb",adModeUnknown); //连接数据库catch(_com_error e) //捕捉异常CString errormessage;errormessage.Format("Fail to connect the database! \r\n ErroeMessage:%s",e.ErrorMessage);AfxMessageBox(errormessage); //show the error messagereturn FALSE;在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID,_bstr_t Password, long Options )ConnectionString为连接字串,UserID是用户名, Password是登陆密码,Options 是连接选项,用于指定Connection对象对数据的更新许可权,Options可以是如下几个常量:adModeUnknown:缺省。
当前的许可权未设置adModeRead:只读adModeWrite:只写adModeReadWrite:可以读写adModeShareDenyRead:阻止其它Connection对象以读权限打开连接adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接adModeShareExclusive:阻止其它Connection对象打开连接adModeShareDenyNone:允许其它程序或对象以任何权限建立连接对ACCESS2000数据库的连接(还有其他的连接方式,深入了解的话参看材料吧)【4】执行SQL命令并取得结果记录集为了取得结果记录集,我们在PlaceNameDlg.h里定义一个指向Recordset对象的指针,(刚才已经定义过了)下面为其创建Recordset对象的实例:m_pRecordset.CreateInstance("ADODB.Recordset");BOOL CPlaceNameDlg::OnInitDialog()CDialog::OnInitDialog();long i;int nItem; //暂时储存ListControl的行号trym_pRecordset.CreateInstance("ADODB.Recordset");m_pRecordset->Open((_bstr_t)m_SqlText,_variant_t((IDispatch*)theApp.m_pConnection, true),adOpenStatic,adLockOptimistic,adCmdText); //IDispatch 是关于OLE的东西,在此省略一点。
我没查hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和//为了放下查出的数据,把ListControl原来的数据清除了先!//删除所有记录行m_LisCtrlResult.DeleteAllItems();//删除所有列表头while(m_LisCtrlResult.DeleteColumn(0));//更新窗口this->UpdateWindow();if(SUCCEEDED(hr))fields->get_Count(&nRstCol); //得到记录集的字段集合中的字段的总个数for(i = 0; i < nRstCol; i++)fields->Item[i]->get_Name(&bstrColName); //得到记录集中的字段名strColName[i] = bstrColName;//////////为列表控件添加字段的名字//////////m_LisCtrlResult.InsertColumn(i, strColName[i], LVCFMT_LEFT, 70);while(!m_pRecordset->adoEOF)nItem = m_LisCtrlResult.InsertItem(0, NULL); //插入新的一行。
把行号放在//了nItem里边。
for(i = 0; i < nRstCol; i++)m_LisCtrlResult.SetItem(nItem, i, 1,(_bstr_t)m_pRecordset->GetCollect((_bstr_t)strColName[i]),NULL, 0, 0, 0);//把读出来的数据项放入ListControl里边m_pRecordset->MoveNext(); //记得使记录指针移动哦catch(_com_error e)///捕捉异常AfxMessageBox("Fail to read the database!");///显示错误信息【4】使用SQL语句进行查询很简单,在OnQuery函数里加入两句代码就好了!void CPlaceNameDlg::OnQuery()// TODO: Add your control notification handler code hereUpdateData();this->SendMessage(WM_INITDIALOG);【6】关闭记录集与连接打开了记录集或连接,最好都关闭吧,用Close方法就可以。