实用数据库编程的求职信息3篇
【请您参阅】下面供您参考的“实用数据库编程的求职信息3篇”是由阿拉网友精心整理分享的,供您阅读参考之用,希望此例范文对您有所帮助,喜欢就复制下载支持一下小编了!
数据库编程的求职信息篇1
尊敬的人力资源部领导:
您好!我叫,感谢您在百忙之中查看我的资料。我是新华学校的一名应届毕业生,在校期间,我勤奋努力学习,成绩优异,多次获学校学金,掌握了windows、c语言、pasca、,数据结构、数据库原理等专业基础知识。同时,通过大量的实际操作,我熟练掌握了dos,windows操作系统,并对unix有一定的了解,能够独立word、excel、photoshop等应用等软件,有一定的语言编程基础,在经济信息及计算机应用专业通过三年的学习,我已具备了扎实的专业基础知识功底。
作为一名的学生,我认识到互联网将在未来经济中发挥巨大的作用,所以,业余时间我刻苦自学了很多网络知识。首先,在internet基础应用方面,比如浏览网页,搜索引擎的使用,网上查找,下载所需信息等都很熟练。而且,我还不满足于此,进一步学习了html语言,和,frontpage,dreamweaver等网页编辑软件,firework,flash等网页图形处理软件,可以自如的进行网页编辑。现在我在互联网上,就已经建立了自己的个人主页,并用文件传输协议(ftp)进行维护和。不断的努力使我的网站日趋成熟。
当然一个高素质除了掌握扎实的专业知识,还应该具有丰富的人文知识。我从小热爱文学,广览群书,为我的写作能力奠定了坚实的基础。读书以来,不断参加校内外征文活动,发表过作品数篇。特别在大学期间,被特邀为校报记者,参赛文章多次获得校园文学奖。.此外,在英语的学习方面,我已具备了一定的听,说,写和会话能力,可以用英语进行日常的交流。
未来社会需要的是理论和实践相结合的复合型。学习之余,我参加了大量的社会实践活动,做家教,去商场做过促销员,从而锻炼了自己吃苦耐劳,一丝不苟的工作做风.未来是一个充满挑战的世界,鲜花和荣誉只能代表过去。年轻的我希望公司给我展示自我的机会。没有您伯乐的眼光,对我来讲那是一种遗憾。因此,我非常希望能够成为贵公司的一员。我将以更大的热情和勤奋上进的工作态度投入到新的工作环境中去,为公司的发展添砖加瓦。
愿公司的明天更美好!
此致
敬礼
本文地址:http:///zuowen/
数据库编程的求职信息篇2
数据库编程的自荐信例文,关键词是自荐信,数据库编程,
尊敬的人力资源部领导:
您好!我叫刘欣,感谢您在百忙之中查看我的资料。我是新华学校的一名好范文,在校期间,我勤奋努力学习,成绩优异,多次获学校学金,掌握了windows、c语言、pasca、,数据结构、数据库原理等专业基础知识。同时,通过大量的实际操作,我熟练掌握了dos,windows操作系统,并对unix有一定的了解,能够独立word、excel、photoshop等应用等软件,有一定的语言编程基础,在经济信息及计算机应用专业通过三年的学习,我已具备了扎实的专业基础知识功底。
作为一名的学生,我认识到互联网将在未来经济中发挥巨大的作用,所以,业余时间我刻苦自学了很多网络知识。首先,在internet基础应用方面,比如浏览网页,搜索引擎的使用,网上查找,下载所需信息等都很熟练。而且,我还不满足于此,进一步学习了html语言,和,frontpage,dreamweaver等网页编辑软件,firework,flash等网页图形处理软件,可以自如的进行网页编辑。现在我在互联网上,就已经建立了自己的个人主页,并用文件传输协议(ftp)进行维护和。不断的努力使我的网站日趋成熟。
当然一个高素质除了掌握扎实的专业知识,还应该具有丰富的人文知识。我从小热爱文学,广览群书,为我的写作能力奠定了坚实的基础。读书以来,不断参加校内外征文活动,发表过作品数篇。特别在大学期间,被特邀为校报记者,参赛文章多次获得校园文学奖。.此外,在英语的学习方面,我已具备了一定的听,说,写和会话能力,可以用英语进行日常的交流。
未来社会需要的是理论和实践相结合的复合型。学习之余,我参加了大量的社会实践活动,做家教,去商场做过促销员,从而锻炼了自己吃苦耐劳,一丝不苟的工作做风.未来是一个充满挑战的世界,鲜花和荣誉只能代表过去。年轻的我希望公司给我展示自我的机会。没有您伯乐的眼光,对我来讲那是一种遗憾。因此,我非常希望能够成为贵公司的一员。我将以更大的热情和勤奋上进的工作态度投入到新的工作环境中去,为公司的发展添砖加瓦。
愿公司的明天更美好!
此致
敬礼
数据库编程的求职信息篇3
当前各种主流数据库有很多,包括oracle, ms sql server, sybase, informix, mysql, db2, interbase / firebird, postgresql, sqlite, sap/db, timesten, ms access等等。数据库编程是对数据库的创建、读写等一列的操作。数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用odbc api、ado、、oci、otl等方法;数据库服务端编程主要使用ole db等方法。数据库编程需要掌握一些访问数据库技术方法,还需要注意怎么设计高效的数据库、数据库管理与运行的优化、数据库语句的优化。
一、访问数据库技术方法
数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用odbc api、ado、、oci、otl等方法;数据库服务端编程主要使用ole db等方法。
1、几种是数据库访问方法比较
odbc
api是一种适合数据库底层开发的编程方法,odbc
api提供大量对数据源的操作,odbc
api能够灵活地操作游标,支持各种帮定选项,在所有odbc相关编程中,api编程具有最高的执行速度。dao提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过access/jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
ole
db提供了com接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
ado最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。
是利用数据集的概念将数据库数据读入内存中,然后在内存中对数据进行操作,最后将数据集数据回写到源数据库中。
otl 是 oracle, odbc and db2-cli template library 的缩写,是一个c++编译中操控关系数据库的模板库,otl中直接操作oracle主要是通过oracle提供的oci接口进行,进行操作db2数据库则是通过cli接口来进行,至于ms的数据库和其它一些数据库,则otl只提供了odbc来操作的方式。当然oracle和db2也可以由otl间接使用odbc的方式来进行操纵。具有以下优点:跨平台;运行效率高,与c语言直接调用api相当;开发效率高,使用起来更简单,更简洁;部署容易,不需要ado组件, framework 等。
2、vc数据库编程几种方法
vc数据库编程几种方法,包括odbc连接、mfc
odbc连接、dao连接、ole
db、ole
db
templates连接、ado、oracle专用方法(oci(oracle
call
interface)访问、oracle
object
ole
c++
class
library)。
<1.>通用方法
连接
odbc(open
database
connectivity)是msoa的一部分,是一个标准数据库接口。它提供对关系数据库访问的统一接口,实现对异构数据源的一致访问。odbc数据访问由以下部分组成:
<1>句柄(handles):odbc使用句柄来标识odbc环境、连接、语句和描述器.<2>缓存区(buffers):
<3>数据类型(data
types)
<4>一致性级别(conformance
levels)
用odbc设计客户端的一般步骤:
<1>分配odbc环境
<2>分配连接句柄
<3>连接数据源
<4>构造和执行sql语句
<5>获得查询结果
<6>断开数据源的连接
<7>释放odbc环境
odbc
api是一种适合数据库底层开发的编程方法,odbc
api提供大量对数据源的操作,odbc
api能够灵活地操作游标,支持各种帮定选项,在所有odbc相关编程中,api编程具有最高的执行速度.因此,odbc
api编程属于底层编程。
odbc连接
mfc
odbc是mfc对odbc进行的封装,以简化对odbc
api的 调用,
odbc的封装主要开发了cdatabase类和crecordset类
(1)cdatabase类
cdatabase类用于应用程序建立同数据源的连接。cdatabase类中包含一个m_hdbc变量,它代表了数据源的连接句柄。如果要建立cdatabase类的实例,应先调用该类的构造函数,再调用open函数,通过调用,初始化环境变量,并执行与数据源的连接。在通过close函数关闭数据源。
cdatabase类提供了对数据库进行操作的函数及事务操作。
(2)crecordset类
crecordset类定义了从数据库接收或者发送数据到数据库的成员变量,以实现对数据集的数据操作。
crecordset类的成员变量m_hstmt代表了定义该记录集的sql语句句柄,m_nfields为记录集中字段的个数,m_nparams为记录集所使用的参数个数。
crecordset的记录集通过cdatabase实例的指针实现同数据源的连接,
odbc编程更适合于界面型数据库应用程序的开发,但由于cdatabase类和crecordset类提供的数据库操作函数有限,支持的游标类型也有限,限制了高效的数据库开发。在编程层次上属于高级编程。
应用实例: 1.打开数据库
cdatabase database;
(_t(“dsn=zhuxue”),cdatabase::noodbcdialog);//zhuxue为数据源名称
2.关联记录集
crecordset recset(&database);
3.查询记录
cstring ssql1=“";
ssql1 = ”select * from tablename“;
(crecordset::forwardonly, ssql1, crecordset::readonly);
int ti=0;
cdbvariant var;//var可以转换为其他类型的值
while(!())
{
//读取excel内部数值
ldvalue(”id“,var);
jiangxiang[ti].id=_ival;
ldvalue(”name“, jiangxiang[ti].name);
ti++;
xt();
}
();//关闭记录集
4.执行sql语句
cstring ssql=”“;
ssql+=”delete * from 院系审核“;//清空表
esql(ssql);
ssql也可以为insert ,update等语句
5.读取字段名
ssql = ”select * from sheet1“;
//读取的文件有sheet1表的定义,或为本程序生成的表.// 执行查询语句
(crecordset::forwardonly, ssql, crecordset::readonly);
int excelcolcount=cfieldcount();//列数
cstring excelfield[30];
//得到记录集的字段集合中的字段的总个数
for(i=0;i
{
codbcfieldinfo fieldinfo;
cfieldinfo(i,fieldinfo);
excelfield[i].name =_strname;//字段名
}
6.打开excel文件
cstring sdriver = ”microsoft excel driver(*.xls)“;// excel安装驱动
cstring ssql,sexcelfile;//sexcelfile为excel的文件路径
try
{
// 创建进行存取的字符串
(”driver={%s};dsn='';firstrowhasnames=1;readonly=false;create_db=/“%s/”;dbq=%s“,sdriver, sexcelfile, sexcelfile);
// 创建数据库(既excel表格文件)
if((ssql,cdatabase::noodbcdialog))
{
//可以把excel作为一个数据库操作
}
}
catch(e)
{
trace1(”excel驱动没有安装: %s“,sdriver);
afxmessagebox(”读取失败,请检查是否定义数据区sheet1“);
}
连接
dao(data
access
object)是一组microsoft
access/直接与access/jet数据库通信.通过jet数据库引擎,dao也可以同其他数据库进行通信。dao还封装了access数据库的结构单元,通过dao可以直接修改access数据库的结构,而不必使用sql的数据定义语言(ddl)。
dao的体系结构如下:
dao封装的类:
(1)cdaoworkspace:对dao工作区(数据库处理事务管理器)的封装
(2)cdaodatabase:对dao数据库对象的封装,负责数据库连接.(3)cdaorecordset:对dao记录集对象的封装,代表所选的一组记录.(4)cdaotabledef:对表定义对象的封装,代表基本表或附加表定义.(5)cdaoquerydef:对查询对象的封装,包含所有查询的定义.(6)cdaoexception:dao用于接收数据库操作异常的类.(7)cdaofieldexchange
dao提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过access/jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
dao相对于odbc来说,
db连接
ole
db对odbc进行了两方面的扩展:一是提供了数据库编程的ole接口即com,二是提供了一个可用于关系型和非关系型数据源的接口。
ole
db提供了com接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
与odbc
api一样,ole
db也属于底层的数据库编程接口,ole
db结合了odbc对关系数据库的操作功能,并进行扩展,可以访问非关系数据库。
ole
db访问数据库的原理如下:
ole
db程序结构:
ole
db由客户(consumer)和服务器(provider)。客户是使用数据的应用程序,它通过ole
db接口对数据提供者的数据进行访问和控制。ole
db服务器是提供ole
db接口的软件组件。根据提供的内容可以分为数据提供程序(data
provider)和服务提供程序(service
provider)。
程序结构原理图如下:
<1>数据提供程序
数据提供程序拥有自己的数据并把数据以表格的形式呈现给使用者使用.<2>服务提供程序
服务提供程序是数据提供程序和使用者的结合。它是ole
db体系结构中的中间件,它是ole
db数据源的使用者和数据使用程序的提供者
<3>数据使用程序
db开发程序的一般步骤:
<1>初始化com环境
<2>连接数据源
<3>打开对话
<4>执行命令
<5>处理结果
<6>清除对象
应用实例:
使用oledb编写数据库应用程序 1
概述
ole db的存在为用户提供了一种统一的方法来访问所有不同种类的数据源。ole db可以在不同的数据源中进行转换。利用ole db,客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上,而不必弄懂大量不同数据库的访问协议。ole db是一套通过com接口访问数据的activex接口。这个ole db接口相当通用,足以提供一种访问数据的统一手段,而不管存储数据所使用的方法如何。同时,ole db还允许开发人员继续利用基础数据库技术的优点,而不必为了利用这些优点而把数据移出来。
使用atl使用ole db数据使用程序
由于直接使用ole db的对象和接口设计数据库应用程序需要书写大量的代码。为了简化程序设计,visual c++提供了atl模板用于设计ole db数据应用程序和数据提供程序。利用atl模板可以很容易地将ole db与mfc结合起来,使数据库的参数查询等复杂的编程得到简化。mfc提供的数据库类使ole db的编程更具有面向对象的特性。viual c++所提供用于ole db的atl模板可分为数据提供程序的模板和数据使用程序的模板。
使用atl模板创建数据应用程序一般有以下几步骤: 1)、创建应用框架
2)、加入atl产生的模板类
3)、在应用中使用产生的数据访问对象3 不用atl使用ole db数据使用程序
利用atl模板产生数据使用程序较为简单,但适用性不广,不能动态适应数据库的变化。下面我们介绍直接使用mfc ole db类来生成数据使用程序。模板的使用
ole db数据使用者模板是由一些模板组成的,包括如下一些模板,下面对一些常用类作一些介绍。1)、会话类 cdatasource类
cdatasource类与ole db的数据源对象相对应。这个类代表了ole db数据提供程序和数据源之间的连接。只有当数据源的连接被建立之后,才能产生会话对象,可以调用open来打开数据源的连接。csession类
csession所创建的对象代表了一个单独的数据库访问的会话。一个用cdatasource类产生的数据源对象可以创建一个或者多个会话,要在数据源对象上产生一个会话对象,需要调用函数open()来打开。同时,会话对象还可用于创建事务操作。
cenumeratoraccessor类
cenumeratoraccessor类是用来访问枚举器查询后所产生的行集中可用数据提供程序的信息的访问器,可提供当前可用的数据提供程序和可见的访问器。2)、访问器类 cacessor类
caccessor类代表与访问器的类型。当用户知道数据库的类型和结构时,可以使用此类。它支持对一个行集采用多个访问器,并且,存放数据的缓冲区是由用户分配的。cdynamicaccessor类
cdynamicaccessor类用来在程序运行时动态的创建访问器。当系统运行时,可以动态地从行集中获得列的信息,可根据此信息动态地创建访问器。cmanualaccessor类
cmanualaccessor类中以在程序运行时将列与变量绑定或者是将参数与变量捆定。3)、行集类 crowset类
crowset类封装了行集对象和相应的接口,并且提供了一些方法用于查询、设置数据等。可以用move()等函数进行记录移动,用getdata()函数读取数据,用insert()、delete()、setdata()来更新数据。cbulkrowset类
cbulkrowset类用于在一次调用中取回多个行句柄或者对多个行进行操作。carrayrowset类
carrayrowset类提供用数组下标进行数据访问。4)、命令类 ctable类 ctable类用于对数据库的简单访问,用数据源的名称得到行集,从而得到数据。ccommand类
ccommand类用于支持命令的数据源。可以用open()函数来执行sql命令,也可以prepare()函数先对命令进行准备,对于支持命令的数据源,可以提高程序的灵活性和健壮性。
在头文件里,加入如下代码。#include extern ccommodule _module;#include #include #include // if you are using schema templates 文件里,加入如下代码。#include ccommodule _module;决定使用何种类型的存取程序和行集。获取数据
在打开数据源,会话,行集对象后就可以获取数据了。所获取的数据类型取决于所用的存取程序,可能需要绑定列。按以下步骤。1、用正确的命令打开行集对象。
2、如果使用cmanualaccessor,在使用之前与相应列进行绑定。要绑定列,可以用函数getcolumninfo,如下所示: // get the column information ulong ulcolumns
= 0;dbcolumninfo* pcolumninfo = null;lpolestr pstrings
= null;if(umninfo(&ulcolumns, &pcolumninfo, &pstrings)!= s_ok)afxthrowoledbexception(_prowset, iid_icolumnsinfo);struct mybind* pbind = new mybind[ulcolumns];accessor(ulcolumns, &pbind[0], sizeof(mybind)*ulcolumns);for(ulong l=0;l
3、用while循环来取数据。在循环中,调用movenext来测试光标的返回值是否为s_ok,如下所示: while(xt()== s_ok){
// add code to fetch data here
// if you are not using an auto accessor, call a()}
4、在while循环内,可以通过不同的存取程序获取数据。1)如果使用的是caccessor类,可以通过使用它们的数据成员进行直接访问。如下所示:
2)如果使用的是cdynamicaccessor 或cdynamicparameteraccessor 类,可以通过getvalue或getcolumn函数来获取数据。可以用gettype来获取所用数据类型。如下所示: while(xt()== s_ok){
// use the dynamic accessor functions to retrieve your
// data
ulong ulcolumns = umncount();
for(ulong i=0;i
{
ue(i);
} } 3)如果使用的是cmanualaccessor,可以指定自己的数据成员,绑定它们。就可以直接存取。如下所示: while(xt()== s_ok){
// use the data members you specified in the calls to
// tf(”%s“, szfoo);} 决定行集的数据类型
在运行时决定数据类型,要用动态或手工的存取程序。如果用的是手工存取程序,可以用getcolumninfo函数得到行集的列信息。从这里可以得到数据类型。4
总结
由于现在有多种数据源,想要对这些数据进行访问管理的唯一途径就是通过一些同类机制来实现,如ole db。高级ole db结构分成两部分:客户和提供者。客户使用由提供者生成的数据。
就像其它基于com的多数结构一样,ole db的开发人员需要实现很多的接口,其中大部分是模板文件。
当生成一个客户对象时,可以通过atl对象向导指向一个数据源而创建一个简单的客户。atl对象向导将会检查数据源并创建数据库的客户端代理。从那里,可以通过ole db客户模板使用标准的浏览函数。
当生成一个提供者时,向导提供了一个很好的开端,它们仅仅是生成了一个简单的提供者来列举某一目录下的文件。然后,提供者模板包含了ole db支持的完全补充内容。在这种支持下,用户可以创建ole db提供者,来实现行集定位策略、数据的读写以及建立书签。应用案例:
visual c++中使用ole db读写sql server 在需要对数据库进行操作时,ole db总是被认为是一种效率最高但最难的方法。但是以我最近使用ole db的经验看来,ole db的效率高则高矣,但却一点都不难。说它难恐怕主要是因为可参考的中文资料太少,为了帮助以后需要接触ole db的同行,我撰写了这篇文章。本文包含如下内容:
db写数据库; db读数据库;
db对二进制数据(text、ntext、image等)的处理。
首先来看看对sql server进行写操作的代码,有一定vc基础的读者应该可以很顺利地看懂。ole db写数据库,就是这么简单!
注:
1.以下代码中使用的模板类eautoreleaseptr
与atl中的ccomptr
类似,是一个在析构时自动调用release的类。ccomptr
的代码在中定义。
2.以下代码均在unicode环境下编译,因为执行的sql语句必须是unicode的。设置工程为unicode的方法是:首先在project->settings->c/c++的属性页中的preprocessor中,删除_mbcs写入unicode,_unicode。然后在link属性页中category中选择output,在entry-point symbol 中添加wwinmaincrtstartup。eautoreleaseptr
pidbinitialize;hresult hresult = connectdatabase(&pidbinitialize, _t(”“), _t(“sa”), _t(”password“));if(failed(hresult)){
//失败,可能是因为数据库没有启动、用户名密码错等等return;}eautoreleaseptr
piopenrowset;hresult = createsession(pidbinitialize, &piopenrowset);if(failed(hresult)){
//出错return;}eautoreleaseptr
picommand;eautoreleaseptr
picommandtext;hresult = createcommand(piopenrowset, &picommand, &picommandtext);if(failed(hresult)){
//出错return;}hresult = executesql(picommand, picommandtext, _t(”use pbdata“));if(failed(hresult)){
//如果这里失败,那就是sql语句执行失败。在此处,就是pbdata还未创建
return;}
// 创建表 executesql(picommand, picommandtext, _t(”create table 2005_1(volume real not null,id int not null identity)“));
// 添加记录
executesql(picommand, picommandtext, _t(”insert into 2005_1 values()“));//...其中几个函数的代码如下:
hresult connectdatabase(idbinitialize** ppidbinitialize, lpctstr pszdatasource, lpctstr pszuserid, lpctstr pszpassword){
assert(ppidbinitialize!= null && pszdatasource!= null && pszuserid!= null && pszpassword!= null);
uint utimeout = 15u;// 连接数据库超时(秒)
tchar szinitstr[1024];
verify(1023 >= wsprintf(szinitstr, _t(”provider=sqloledb;data source=%s;initial catalog=master;user id=%s;password=%s;connect timeout=%u“), pszdatasource, pszuserid, pszpassword, utimeout));
//initial catalog=master指明连接成功后,”use master“。
eautoreleaseptr
pidatainitialize;
hresult hresult = ::cocreateinstance(clsid_msdainitialize, null, clsctx_inproc_server,iid_idatainitialize,(void**)&pidatainitialize);if(failed(hresult))
{
return hresult;
}
eautoreleaseptr
pidbinitialize;
hresult = pidatainitialize->getdatasource(null, clsctx_inproc_server,(lpcolestr)szinitstr,iid_idbinitialize,(iunknown**)&pidbinitialize);if(failed(hresult))
{
return hresult;
}
hresult = pidbinitialize->initialize();
if(failed(hresult))
{
return hresult;
}
* ppidbinitialize = ();
return s_ok;}
hresult createsession(idbinitialize* pidbinitialize, iopenrowset** ppiopenrowset){
assert(pidbinitialize!= null && ppiopenrowset!= null);
eautoreleaseptr
psession;
hresult hresult = pidbinitialize->queryinterface(iid_idbcreatesession,(void**)&psession);if(failed(hresult))
{
return hresult;
}
eautoreleaseptr
piopenrowset;
hresult = psession->createsession(null, iid_iopenrowset,(iunknown**)&piopenrowset);if(failed(hresult))
{
return hresult;
}
* ppiopenrowset = ();
return s_ok;}
hresult createcommand(iopenrowset* piopenrowset, icommand** ppicommand, icommandtext** ppicommandtext){
assert(piopenrowset!= null && ppicommand!= null && ppicommandtext!= null);
hresult hresult;
eautoreleaseptr
picommand;
{eautoreleaseptr
picreatecommand;
hresult = piopenrowset->queryinterface(iid_idbcreatecommand,(void**)&picreatecommand);if(failed(hresult))
{
return hresult;
}
hresult = picreatecommand->createcommand(null, iid_icommand,(iunknown**)&picommand);
if(failed(hresult))
{
return hresult;
}
}
eautoreleaseptr
picommandtext;
hresult = picommand->queryinterface(&picommandtext);if(failed(hresult))
{
return hresult;
}
* ppicommand = ();
* ppicommandtext = ();
return s_ok;}
hresult executesql(icommand* picommand, icommandtext* picommandtext, lpctstr pszcommand, long* plrowsaffected){
assert(picommand!= null && picommandtext!= null && pszcommand!= null && pszcommand[0]!= 0);
hresult hresult = picommandtext->setcommandtext(dbguid_dbsql,(lpcolestr)pszcommand);
if(failed(hresult))
{
return hresult;
}
long laffected;
hresult = picommand->execute(null, iid_null, null, plrowsaffected == null ? &laffected : plrowsaffected,(iunknown**)null);
return hresult;}
以上就是写数据库的全部代码了,是不是很简单呢?下面再来读的。
// 先用与上面代码中一样的步骤获取picommand,picommandtext。此处省略
hresult hresult = picommandtext->setcommandtext(dbguid_dbsql,(lpcolestr)_t(”select volume from 2005_1 where id = @@identity"));//取我们刚刚添加的那一条记录
if(failed(hresult)){
return;}
long laffected;eautoreleaseptr
pirowset;hresult = picommand->execute(null, iid_irowset, null, &laffected,(iunknown**)&pirowset);if(failed(hresult)){
return;}eautoreleaseptr
piaccessor;hresult = pirowset->queryinterface(iid_iaccessor,(void**)&piaccessor);if(failed(hresult)){
return;}// 一个根据表中各字段的数值类型而定义的结构,用于存储返回的各字段的值
struct cloadlastfromdb {
dbstatus dwdsvolume;
dword
dwlenvolume;
float
fvolume;};
// 此处我们只查询了一个字段。如果要查询多个字段,cloadlastfromdb中要添加相应的字段定义,下面的dbbinding也要相应扩充。dbbinding[].iordinal要分别指向各个字段,dbbinding[].wtype要根据字段类型赋合适的值。
dbbinding dbbinding[1];dbbinding[0].iordinal
= 1;
// volume 字段的位置,从 1 开始
dbbinding[0].obvalue
= offsetof(cloadlastfromdb, fvolume);dbbinding[0].oblength
= offsetof(cloadlastfromdb, dwlenvolume);dbbinding[0].obstatus
= offsetof(cloadlastfromdb, dwdsvolume);dbbinding[0].ptypeinfo
= null;dbbinding[0].pobject
= null;dbbinding[0].pbindext
= null;dbbinding[0].dwpart
= dbpart_value | dbpart_status | dbpart_length;dbbinding[0].dwmemowner = dbmemowner_clientowned;dbbinding[0].eparamio
= dbparamio_notparam;dbbinding[0].cbmaxlen
= 0;dbbinding[0].dwflags
= 0;