『壹』 vc++.net ADO 数据库开发问题
很容易了。
先设好ADO的连接;
下面用ADO读取相关的数据:
adodc1.recordsource="select ***** from *** where ***"(具体语句我没写,根据你要查询的内容而定,不会的话另行讨论)
adodc1.refresh
adodc1.recordset.movefirst
清空列表框
combo1.clear
添加数据
for i=1 to adodc1.recordset.recordcount
combo1.additem adodc1.recordset.fields("****")
nexti
这样就应该行了,我的程序里都是这么用的,当然,你还可以在读取数据时进行排序
『贰』 请简描述ADO.NET访问数据库的步骤
1.创建数据库连接字符创抄
2.导入命名空间System.data.sqlcen...
3.jia创建SQLCONNECTION 对象 把链接字符创 放进去
4. 打开数据库
5.声明SQLcommand对象 括号内放 执行命令的SQL语句 和connection对象
6command对象。方法执行相关命令
『叁』 Ado.net访问数据库的方法和步骤
不论从语法来看 还是从风格和设计目标来看 ADO NET都和ADO有显著的不同 在ASP中通过ADO访问数据库 一般要通过以下四个步骤
创建一个到数据库的链路 即ADO Connection
查询一个数据集合 即执行SQL 产生一个Recordset
对数据集合进行需要的操作
关闭数据链路
在ADO NET里 这些步骤有很大的变化 ADO NET的最重要概念之一是DataSet DataSet是不依赖于数据库的独立数据集合 所谓独立 就是 即使断开数据链路 或者关闭数据库 DataSet依然是可用的 如果你在ASP里面使用过非连接记录集合(Connectionless Recordset) 那么DataSet就是这种技术的最彻底的替代品
有了DataSet 那么 ADO NET访问数据库的步骤就相应地改变了
◆创建一个数据库链路 ◆请求一个记录集合 ◆把记录集合暂存到DataSet ◆如果需要 返回第 步 (DataSet可以容纳多个数据集合) ◆关闭数据库链路 ◆在DataSet上做所需要的操作
lishixin/Article/program/net/201311/15216
『肆』 labview中怎么用ado创建数据库
eW;中利用接口访问数据库的方法;黎洪生;李超;刘俊刚;(武汉理工大学西院信息学院;450070);摘要较对LabView中的几种数据库访问方法作了;关键词:LabVjew数据库ADO;SQL;引言;LabView(1aboratoryVinual;engineering;利用其他语言如visualc++编写DLL程序访;利用中间文件存取数据,先将数据
eW
中利用AD0接口访问数据库的方法
黎洪生
李超
刘俊刚
(武汉理工大学西院信息学院
450070)
摘要较对LabView中的几种数据库访问方法作了一些比较。详细说明了利用ADO接口访问数据库的方法,并利用该方法实现了对实时数据库的访问。
关键词:LabVjew数据库ADO
SQL
1
引言
LabView(1aboratoryVinualinstnlment
engineering
利用其他语言如visualc++编写DLL程序访问数据库,利用LabView所带的DLL接口访问该程序,可以实现间接的访问数据库。用这种方法实现需要的工作量比较大。
利用中间文件存取数据,先将数据存入文件之中,在一定的时刻或者是需要的时候再将数据导入到数据库之中。这种方法的实现比较简单,但是需要单独的软件对数据文件导入导出,不能对数据进行实时的存取。
这几种方法虽然可以实现对数据库的访问,但各有缺点,不能满足监控系统中对实时数据库访问的要求。本
文提出的利用ADO接口访问数据库的方法则可以较好的
workbench实验室虚拟仪器工程平台)是美国NI(NationalInstmments)公司标志性的虚拟仪器产品,是一种基于图形化语言的开发、调试和运行的集成化环境。它主要用于来开发数据采集、仪器控制、测试测量及过程监测和控制等领域的应用程序。它使用图形语言,即各种图表,图形符号、连线等编程,界面非常宦观形象,相对于传统的编程方式而言,它不仅简单易学而且执行的效率也很高。LabView中自带丰富的函数库,包括数据采集、数据分析、网络、Activex等集成库,提供了DLL库和cIN节点和大量的仪器驱动器、网络VIs与其他外部程序或外部
设备进行连接。它所提供的自动化Activex、DDE、SQL
解决这个问题。
等功能可以很方便的与其他Windows应用程序一起集成用户的应用程序。
基于LabView的上述特点和功能,在开发某监控系统的工程中笔者选择了LabView作为开发工具。
3
利用ADO接口访问数据库简介
AD0(ActiveX
Data
0bjects)是Microsoft为最新数据
访问接口OLEDB设计的应用层接口,它为一致的数据
访问接口提供了良好的扩展性,不再局限于特定的数据
源。这种特征使此技术具有非常灵活的访问特性
『伍』 ADO是什么麻烦告诉我
一种程序对象,用于表示用户数据库中的数据结构和所包含的数据。
在Microsoft Visual Basic编辑器中,可以使用ADO对象以及ADO的附加组件(称为Microsoft ADO Extensions for DLL and Security(ADOX))来创建或修改表和查询、检验数据库、或者访问外部数据源。还可在代码中使用ADO来操作数据库中的数据。
ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。
例如,如果希望编写应用程序从DB2或Oracle数据库中向网页提供数据,可以将ADO程序包括在作为活动服务器页(ASP)的HTML文件中。当用户从网站请求网页时,返回的网页也包括了数据中的相应数据,这些是由于使用了ADO代码的结果。
(5)ado数据库怎么开发扩展阅读:
ADO接口简介
1、_ConnectionPtr接口
返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
2、_CommandPtr接口
返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
3、_RecordsetPtr接口
是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
『陆』 ADO是什么它的作用是什么
ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据。
在Microsoft Visual Basic编辑器中,可以使用ADO对象以及ADO的附加组件(称为Microsoft ADO Extensions for DLL and Security(ADOX))来创建或修改表和查询、检验数据库、或者访问外部数据源。还可在代码中使用ADO来操作数据库中的数据。
(6)ado数据库怎么开发扩展阅读
像Microsoft的其它系统接口一样,ADO是面向对象的。它是Microsoft全局数据访问(UDA)的一部分,Microsoft认为与其自己创建一个数据,不如利用UDA访问已有的数据库。
为达到这一目的,Microsoft和其它数据库公司在它们的数据库和Microsoft的OLE数据库之间提供了一个“桥”程序,OLE数据库已经在使用ADO技术。
ADO技术优势
1、ADO的优势就是拥有更好的LINQ提供程序、文档,并且是由微软所支持的。
2、ADO具有大量Entity Framework 4.0所不具备的特性,像批量读/写、“额外的”延迟、集合过滤器、调整等等。
3、ADO工具的普遍开发速度快。
参考资料:网络—ActiveX Data Objects
『柒』 关于vc++6.0中 通过ADO连接数据库的问题!!
执行SQL命令并取得结果记录集
为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;
并为其创建Recordset对象的实例: m_pRecordset.CreateInstance("ADODB.Recordset");
SQL命令的执行可以采用多种形式,下面我们一进行阐述。
(1)利用Connection对象的Execute方法执行SQL命令
Execute方法的原型如下所示:
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一:
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一个表名
adCmdProc:表明CommandText是一个存储过程
adCmdUnknown:未知
Execute执行完后返回一个指向记录集的指针,下面我们给出具体代码并作说明。
_variant_t RecordsAffected;
///执行SQL命令:CREATE TABLE创建表格users,users包含四个字段:整形ID,字符串username,整形old,日期型birthday
m_pConnection- >Execute("CREATE TABLE users(ID INTEGER,username TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected,adCmdText);
///往表格里面添加记录
m_pConnection- >Execute("INSERT INTO users(ID,username,old,birthday) VALUES (1, "Washington ",25, "1970/1/1 ")",&RecordsAffected,adCmdText);
///将所有记录old字段的值加一
m_pConnection- >Execute("UPDATE users SET old = old+1",&RecordsAffected,adCmdText);
///执行SQL统计命令得到包含记录条数的记录集
m_pRecordset = m_pConnection- >Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset- >GetCollect(vIndex);///取得第一个字段的值放入vCount变量
m_pRecordset- >Close();///关闭记录集
CString message;
message.Format("共有%d条记录",vCount.lVal);
AfxMessageBox(message);///显示当前记录条数
(2)利用Command对象来执行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_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);///执行命令,取得记录集
在这段代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。下次我们将详细介绍。
(3)直接用Recordset对象进行查询取得记录集
例如
m_pRecordset- >Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
Open方法的原型是这样的:
HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
其中:
①Source是数据查询字符串
②ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象)
③CursorType光标类型,它可以是以下值之一,请看这个枚举结构:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特别指定
adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。
adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。
adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操作对你的记录集来说是不可见的。
};
④LockType锁定类型,它可以是以下值之一,请看如下枚举结构:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只读记录集
adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制
adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作
adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式下完成。
};
⑤Options请参考本文中对Connection对象的Execute方法的介绍
【5】记录集的遍历、更新
根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。
_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset- >Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset- >adoEOF)///这里为什么是adoEOF而不是EOF呢?还记得rename("EOF","adoEOF")这一句吗?
{
vID = m_pRecordset- >GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
vUsername = m_pRecordset- >GetCollect("username");///取得username字段的值
vOld = m_pRecordset- >GetCollect("old");
vBirthday = m_pRecordset- >GetCollect("birthday");
///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)
TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset- >MoveNext();///移到下一条记录
}
m_pRecordset- >MoveFirst();///移到首条记录
m_pRecordset- >Delete(adAffectCurrent);///删除当前记录
///添加三条新记录并赋值
for(int i=0;i <3;i++)
{
m_pRecordset- >AddNew();///添加新记录
m_pRecordset- >PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset- >PutCollect("username",_variant_t("叶利钦"));
m_pRecordset- >PutCollect("old",_variant_t((long)71));
m_pRecordset- >PutCollect("birthday",_variant_t("1930-3-15"));
}
m_pRecordset- >Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
m_pRecordset- >PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
m_pRecordset- >Update();///保存到库中
【6】关闭记录集与连接
记录集或连接都可以用Close方法来关闭
m_pRecordset- >Close();///关闭记录集
m_pConnection- >Close();///关闭连接
至此,我想您已经熟悉了ADO操作数据库的大致流程,也许您已经胸有成竹,也许您还有点胡涂,不要紧!建议你尝试写几个例子,这样会更好地熟悉ADO
------------------------------------------------------------------------------------
给你粘一篇文章
基本流程
万事开头难,任何一种新技术对于初学者来说最重要的还是“入门”,掌握其要点。让我们来看看ADO数据库开发的基本流程吧!
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
准备工作:
为了大家都能测试本文提供的例子,我们采用Access数据库,您也可以直接在我们提供的示例代码中找到这个test.mdb。
下面我们将详细介绍上述步骤并给出相关代码。
【1】COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:
BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......
【2】用#import指令引入ADO类型库
我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
几点说明:
(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
【3】创建Connection对象并连接数据库
首先我们需要添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。
BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
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)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
在这段代码中我们是通过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:阻止其它Connection对象以任何权限打开连接
我们给出一些常用的连接方式供大家参考:
(1)通过JET数据库引擎对ACCESS2000数据库的连接
m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);
(2)通过DSN数据源对任何支持ODBC的数据库进行连接:
m_pConnection- >Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);
(3)不通过DSN对SQL SERVER数据库进行连接:
m_pConnection- >Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);
其中Server是SQL服务器的名称,DATABASE是库的名称
Connection对象除Open方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State
ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:
m_pConnection- >ConnectionTimeout = 5;///设置超时时间为5秒
m_pConnection- >Open("Data Source=adotest;","","",adModeUnknown);
State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:
if(m_pConnection- >State)
m_pConnection- >Close(); ///如果已经打开了连接则关闭它
------------------------------------------------------------------------------------
呵呵,是啊,我以前不做VC的,所以这次老板有个项目要做,没办法啊!!以后多请教啊!!
------------------------------------------------------------------------------------
你现在不少基础的不会,上来就连接数据库有点难
------------------------------------------------------------------------------------
要是你用vc6,就右健点击要添加变量的控件,选择classwizard,选择member variables选项卡,它会自动指到你想要添加变量的控件,你直接点选择add variable,起个名字就可以了
------------------------------------------------------------------------------------
我关键是不知道怎么给控件添加与之相对应的变量!!请明示啊!!
------------------------------------------------------------------------------------
CBaseEditBox是什么东西?你不要这样定义。应该先把控件放在对话框窗体上,再给这个控件添加与之相对应的变量,这样,VC就自动把控件和变量联系起来了
------------------------------------------------------------------------------------
刚弄,不怎么会,请明示!!!
我想把从数据库中读出来的记录放在一个文本框中!
然后在界面上放置了一个edit box
我在类C***Dlg中添加了变量
public:
CBaseEditBox m_list
接下来我在一个按钮的onOK事件里连接数据库并想把得到的记录放到m_list里
// 读入库中各字段并加入列表框中
while(!m_pRecordset- >adoEOF)
{
var = m_pRecordset- >GetCollect("UserName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset- >GetCollect("Password");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_list.AddString( strName + " -- > "+strAge );
m_pRecordset- >MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
m_list.SetCurSel(0);
然后一大堆错误:
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
TestADODlg.cpp
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2065: "m_list " : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2228: left of ".AddString " must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(201) : error C2228: left of ".SetCurSel " must have class/struct/union type
Generating Code...
Error executing cl.exe.
请问什么原因那?
------------------------------------------------------------------------------------
http://www.vckbase.com/document/viewdoc/?id=496
把文章中连接Access的语句换成:
连接SQL数据库:
m_pConnection- >Open("Provider=SQLOLEDB.1;Server=192.168.1.6;DATABASE=mysql;UID=sa;PWD=;","","",adModeUnknown);
其中Server是SQL服务器的名称,DATABASE是库的名称
------------------------------------------------------------------------------------