第一篇:数据库编程专业英文求职信
Dear leaders:
Hello!
I am a forthcoming XXXX University XX in XX graduate students, the school is a computer professional.University for four years, I study hard, the outstanding, have been awarded scholarships.Mentorship in the strict lessons and individual efforts, I have a solid foundation of knowledge.In terms of software, systems have C language, data structure, power Builder, database theory, assembly language, software engineering and object-oriented, such as DELpHI and VC have a certain understanding of Windows programming.I also had extra-curricular learning VB, VF programming, ASp and SQL Server dynamic pages, such as web-based database programming language.Has been prepared by an independent professional database management system.In terms of hardware, through its participation in single-chip design, assembly of the radio, network planning and management projects and the formation of such practice, I have a computer and the working principle of the principle of computer network technology.Into the school since, I take full advantage of a wide range of spare time to participate in social practice.College information in our school computer lab to work two years, not only the professional skills I have been raised, but also the management and organization, I will be able to play and further training, leadership and teachers received recognition and praise.Moreover, science and technology in Europe and Asia have some of the company's work experience, I have some marketing experience and social experience, and outstanding performance.In addition, at school, I also made home, the practice of social surveys and other social activities, and accumulated a wealth of practical experience.If fortunate enough to join, I can dedicated to your company's software development, or at any time in accordance with the needs of the company is committed to a work and learning.“Soon Come, come against, I dust free” is my motto;“immersive an abyss, treading on thin ice” is the attitude of my work;“sincere, and trustworthy” is my most prominent feature;an open mind has given me many friends.Smart-minded, creative thinking, and pioneering spirit of tenacity, coupled with sophisticated professional skills, I believe I am the best choice for you.please give me a chance, I will also you to eye-catching glory.Thank you for your patience in reading my cover letter, such as the need for detailed information, please contact me.敬候good news!
第二篇:计算机软件编程专业求职信
尊敬的HR:
您好!
本人欲申请贵公司外贸业务员一职,所以冒昧写了一封求职信,近段时间从事过两份与专业相关联的工作,仍旧发现自己对外贸行业的热爱和兴趣,我想每个人都有为梦想和理想去热爱努力追求并为之努力付出,并从中获得人生的乐趣。
斯于2010年7月毕业于福建师范大学信息技术学院。我对外贸非常感兴趣,从大三开始我就打算以后毕业后从事进出口业务。我了解这对于我来说并不是一件非常容易的事情,因为我的专业既不是国际贸易专业,也不是英语或其它外语专业,而是计算机可视化软件编程设计,我也未曾有过外贸方面的工作经验。但计算机专业的我从来都未停止过对互联网和电子商务的了解。《羊皮卷》上的话一直鼓舞着我坚持下去,“只要持之以恒,什么都可以做到”。我几乎每天都坚持学习商务英语,大量地听,练习商务书信写作和商务英语口语,学习国际贸易的基本知识,熟悉进出口的业务流程和贸易术语,单证等。另外,我也经常上网通过msn和其它国家的网友用英语交流,发e-mail等,在这个过程中,我看到了自己的进步,同时也体验到了充实的满足感和乐趣。
我知道万事开头难,能够进入外贸行业这个门槛是我的第一步,相信有了我的第一步,我的第二步、第三步……我相信只要肯投入和学习就一定可以创造价值,不过这需要一个创造价值的平台,希望贵公司能给我这次机会。
承蒙审阅,深表感激。
此致
敬礼!
第三篇:英文专业求职信
英文专业求职信
英文专业求职信1
Dear company leader:
Hello!
First of all, I send you my warmest regards. Thank you for reading my cover letter.
I am XX university law school, majoring in law, 20xx graduating college graduates. In the comprehensive evaluation grade ranked No. x (the professional XX), majoring in curriculum of jurisprudence, constitutional law, civil law, criminal law, administrative law, civil procedure law, criminal procedure law and administrative procedure law, economic law, commercial law, economic law, intellectual property law, international law, international law, international economic law etc.. XX school year won the first class scholarship; XX school year two school scholarship, and in 20xx to XX points through the national judicial examination. Professional knowledge is strong, have necessary professional accomplishment. At the same time, English level is good, through CET-4 (XX) and CET-6 (XX). With computer skills, access to the national computer level, the national computer two (VF) certificate. The level of Putonghua test is first class.
I am able to keep good working condition and strong sense of responsibility. Have the spirit of learning, hard work. Optimistic personality, cheerful, positive, willing to help others, good at communication with people, with the spirit of cooperation. I sincerely hope to become a member of your company, so as to develop my special skills and work hand in hand with my colleagues. I will devote myself to the development of your company!
Wish you success in your work!
This
Salute!
英文专业求职信2
尊敬的领导:
你好!请将麻烦。我来自湖北经济学院研究生。我很荣幸有机会给你看我的个人信息。在所有的社会中,为了找到符合自己专业和兴趣的工作,实现自己的人生价值,所有的领导人自我推荐。
我们将自己的简介如下:
我是学习酒店管理专业的大学生,我热爱我的专业并为其投入了巨大的热情和精力。在四年的大学生活,我学习内容包括理论知识学习的专业技能知识。通过这些知识的学习,我有这方面的知识有一定程度的理解和掌握,并有一定的实际操作能力和技术
在学校学习,基本理论知识,或实际操作技能,我把优秀的结果。在学校除了学习,我还积极参加社会实践活动。曾经在XX学院参加“三下乡”社会实践活动。被授予“优秀积极分子”XX 5月到10月曾去法国学习西方饮食文化和法国的高星级酒店实践,这样我能掌握更多的西餐服务的标准和系统。能使用流利的法语和客人沟通。
我真诚地希望能够你的酒店为了实现我的梦想,你的`酒店给我的权力。同时也希望能够你的酒店和精英之间的团结与合作。相信可以使酒店以后的事业蒸蒸日上。如果我有幸加入到酒店,我肯定会努力的做我的工作。
英文专业求职信3
dear leaders:
hello! i am a aviation jiangxi vocational and technical college 09 students customs and international freight.
i learned from the online recruitment advertising your company wish to recruit a foreign dan zhengyuan, special liberty to write candidates. this is my candidate for the job an important cover letter.
six months later, i will jiangxi vocational and technical college 09 aviation customs and international freight professional school training. systematic study of the theory and practice of international trade documents, dan zhengyuan mastered the basic skills and knowledge, can work in the documents. “learn to work at work, in learning learning to learn.” as college students, i focus on their abilities. optimism, perseverance, hard work is my beacon of hope in the rapids at the hoist the sail, brave the rapids in the highlighted character, is my life credo. so i put more enthusiasm among the new challenges, the impact toward higher goals.
will graduate in june next year. in school, i learn the system of international trade theory and practice, theory and practice of international trade documents, basic english, english writing, cargo science, writing, management, international trade practices, business communication and so on. with outstanding results. familiar with computer operation, and the systematic study of accounting, the accounting profession to master the basic skills and knowledge.
last year and this summer, i had two weeks training in a unit, accumulated some work experience. i like to trade dan zhengyuan this job, hoping to become a member of your company, and we make every effort to work together to promote the development of the company do a good job.
such as give me the opportunity to interview, i would be greatly honored.
英文专业求职信4
您好!
感谢您在百忙之中审阅我的求职申请。
入校以来,我坚持刻苦学习,通过四年的积累,拥有了作为一名跨世纪师范大学生应该掌握的理论基础知识和专业知识。在担任班级干部期间,注重锻炼自己的组织领导和协调合作的能力,积极热情地开展工作,在同学中享有一定的威望。
同时,我也利用课余时间加强对自己实践能力的培养,积极参加各种社团活动,全方位充实自己。四年中,我一直在ELIC工作,通过和他们的语言交流,拓宽了自己的文化视野,提高了自己的英语运用能力。我在东北师大附中实习期间,落落大方的教态,明晰清楚的讲解,认真负责的态度获得了指导老师和学生们的一致好评。
天行健,君子当自强不息。我深信我会一步一个脚印走得更好!但我也明白自己的平凡,知道自己在各方面还需要进一步提高。或许在贵校的求职者中我并不是最优秀的,但我相信自己的综合实力,更相信您的慧眼。
大学之道,止于至善。恳切盼望您详考、慎虑,使我与贵校共同发展,求至善、创辉煌!
我的过去正是为贵校的发展准备、积蓄;
我的未来正是为贵校奋斗、拼搏、奉献。
英文专业求职信5
Dear leader,
Hello! First of all, I appreciate your reading my materials in your busy schedule.
I graduated from shandong university of traditional Chinese medicine of traditional Chinese medicine is professional, I don't want to enjoy “books to time square hate less” suffering, more don't want to be a “young don't work hard,” idle young, needy old useless, therefore, in the university life, to accumulate and medical knowledge, improve their various aspects ability. During this period, I have mastered a solid theoretical foundation and made full use of my spare time to participate in clinical practice, which will lay a solid foundation for future clinical practice. Through a large number of clinical practice, I have preliminarily possessed the quality of a medical worker, I believe that the strength of the education, I will realize my life value on the medical path. If knowledge make me have the courage to step into your threshold, to choose and accept you, so, in my own ability and dedication and enthusiasm to the work, combined with their own plasticity and the pursuit of better learning professional knowledge, I think I'll economy in applicants, and become a member of your company. “The machine will try to understand its dull, and the horse will ride and know its good will.” Maybe I am not the best, but I will keep trying. Don't seek a comfortable environment, but seek a chance to develop. I am confident that in my new job, I will be humble, steadfast, diligent and enterprising. I will soon be able to enter a new working environment, take on new roles and make satisfactory achievements.
Look forward to your good news, and wish your company a thriving business.
advance
salute
Sponsor: xx
Xx (date) (month) (year)
英文专业求职信6
尊敬的领导:
您好!我是xx市第二职业高级中学会计专业班的学生,即将踏上社会的我对自己的职业生涯充满了信心和期待,希望您能给我一个与贵公司合作的机会,会计专业求职信。
现在的我首先想得到的是贵公司和社会对我的认可,我认为能展现自己的价值和取得更大的价值是我要努力的方向。只有得到他人的认可,社会的认可,自我的价值也就得到了肯定,这样才能促使我更加有信心的投入到工作中,与贵公司一同向成功前进。
在校时,我学习了很多关于会计这一职业的课程,比如:会计电算化的知识,基础会计的课程,企业会计、财经法规与会计职业道德、珠算、点钞等,我们学校注重的是学生的职业技能和素质,所以我对于会计的账务处理也很熟悉。在校时,我们在老师的悉心教学下用金蝶7.5版财务软件学习账务处理,通过上机操作与运用,我对于电算化处理账务已经能够运用自如。在学习的过程中,我也常会遇到问题,但只要认真的去做,最终问题都被解决了。我希望也能用这种认真的工作态度为贵公司效力。(后附有会计从业资格证书,办公自动化化初级证书等)
几年的学校生活,我学会了不少东西,丰富了我对社会的了解,也巩固了我的专业技能和知识,我在校积极参加各种活动,学校组织的党校培训,校园丝绸文化节,校运会,我也曾在这些活动中取得较好成绩,受到老师的表扬。我还积极参加学生会的招生,因为我希望在校期间能为学校做点事,这样也能锻炼我的管理能力,我喜欢体育,适当的运动既能放松心情又能强身健体,有一个健康的身体才能更好的工作。
我是真心想进贵公司工作的,在工作中继续不断提升自我的工作能力,所谓理论与实践相结合,我会向工作经验资深的同事多请教,“取其精华,取其糟粕”。如果能与贵公司合作,我将无比荣幸,如若无此荣幸,请您指出我的不足之处,好让我改进自己的不足。
希望贵公司能够录用我,我必将好好努力。
在此祝贵公司生意兴荣,事业蒸蒸日上!
此致
敬礼
英文专业求职信7
While studying at the school I was a member of the class publicity, creative and organized a “Premier Zhou footprints along the way forward” the signature of the 1000 activities of students, school teachers and students have been widely acclaimed.
I am well aware that as an economic category of students, the exchange of essential practice. Thus, in 98 years I joined the “soft science enthusiasts Jilin Engineering Association” in the Department of Market Research. As an assistant, I participated in the preparation of the visit and summed up with the “Evergreen Daily” cooperation “consumer survey of university students” and “computer at the university campus,” the research project, through the real data, correcting some of the people of the community college students is incorrect views caused great repercussions.
I firmly believe that to adapt to the needs of society as a complex human resources, into the community is essential to draw nutrients. 99 years in August to October, I am in the “Xiamen Overseas Chinese Electronics Co., Ltd.” in office has done a three-month long promotional Miss, the initial feeling of intense business competition, but also to understand the micro-see giant enterprises in China the status quo. In July the same year to 11-month period, I have a part-time “modern” market consulting company investigators, to “market research” has done a comprehensive, professional, deep understanding. These experiences for me into the community, involved in the operation of business and laid a good foundation.
I have perseverance character, love and respect their jobs, be able to endure hardship, to be bold, the work can独挡一面, but also solidarity and cooperation.
My life philosophy is: “there is nothing.” I believe you chose me, it chose the pursuit of success. I would like to use their professional knowledge and wisdom for the development of your company to make modest!
英文专业求职信8
尊敬的领导:
你好!
首先感谢您在百忙中抽时间来阅读这封!我叫XX,现年16周岁,来自贺州,是药剂专业09届毕业生,毕业于XXX学校!我希望能得到您们的赏识与栽培,为了发挥自己的才能,特向朋友们自荐。在这里我不能向您们出示任何有权威的人士的推荐书来为我谋得职业,也拿不出一累累的获奖证书来做我的筹码,但我会用我所学的知识做为我的奠基石。如果说我有什么优点的话,那就是我年轻,我有能力。虽然我没有过什么药营经验,我坚信自己能做好每项事!
在校期间,我认真学习,努力做好本职工作,在班上身为一名副班长,更要有带头作用,纪律性要严谨。在社团,我是一名理事,安排人员值周,把每象工作安排得井井有序!积累了大量的工作经验,具有良好的身体素质和心理素质。几年来我努力学习专业知识从各门课程的基础知识出发,技能操作规范。并熟悉了常用药物的理化性质,药理作用及剂型特点,掌握了药物的提取、合成、检识等实验技能。
这为我今后奠定了良好基础,也取得良好成绩。除此,我还自学了电脑方面的一些知识,比如:电脑一般故障的排除和文字的处理与排除,制作图片、表格等。作为一名当代学生“服务社会”是我的职责,“敬业”是我的人生信条,“年轻”“可塑性强”是我的资本。我将以饱满的热情,一丝不苟的态度迎接挑战。“大道酬勤”是我的信念,“自强不息”是我的追求。我特在此冒昧自荐,如果能得到您们的青睐我一定会以不断学习、积极进取的精神,竭诚为您们服务,做到鞠躬尽瘁。希望贵学校能给我一个发展的平台,我会好好珍惜它,并全力以赴,为实现自己的人生价值而奋斗,为贵学校的发展贡献力量。
此致
敬礼
求职者:
20xx年9月27日
第四篇:专业英文求职信
专业英文求职信范文
four years as a senior clerk in sales department of the new world products company have,i believe,given me the experience to qualify for the job you advertised in thursday's newspaper.since 1981 i have been responsible for all office details in the administration of sales,including writing much of the
correspondence.in the course of my work,i have become familiar with the various sales territories,and have also in my spare time
experience of handling business problems other than my proper sphere.the years before i was employed at the new world,i was a
secretary for long brother,an accounting firm.there i became familiar with accounting terms and procedures.i was graduated at wah yan college, in june 1974.i am twenty-five years of age and single.i am leaving my present position because i can use my
capabilities more fully in a position with wider scope.my present employer knows of my ambition and is helping me to find a new place.may i see you at your office to tell you more about myself and show you just how well i can do the work you require.yours faithfully
第五篇:数据库编程总结(推荐)
数据库编程总结
当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。数据库编程是对数据库的创建、读写等一列的操作。数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。数据库编程需要掌握一些访问数据库技术方法,还需要注意怎么设计高效的数据库、数据库管理与运行的优化、数据库语句的优化。
一、访问数据库技术方法
数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。
1、几种是数据库访问方法比较
ODBC
API是一种适合数据库底层开发的编程方法,ODBC
API提供大量对数据源的操作,ODBC
API能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关编程中,API编程具有最高的执行速度。DAO提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过Access/Jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
OLE
DB提供了COM接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
ADO最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。
ADO.NET 是利用数据集的概念将数据库数据读入内存中,然后在内存中对数据进行操作,最后将数据集数据回写到源数据库中。
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.net使用起来更简单,更简洁;部署容易,不需要ADO组件,不需要.net 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.>通用方法
1.ODBC连接
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编程属于底层编程。
2.MFC
ODBC连接
MFC
ODBC是MFC对ODBC进行的封装,以简化对ODBC
API的 调用,从而实现面向对象的数据库编程接口.MFC
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实例的指针实现同数据源的连接,即CRecordSet的成员变量m_pDatabase.MFC
ODBC编程更适合于界面型数据库应用程序的开发,但由于CDatabase类和CRecordSet类提供的数据库操作函数有限,支持的游标类型也有限,限制了高效的数据库开发。在编程层次上属于高级编程。
应用实例: 1.打开数据库
CDatabase database;
database.OpenEx(_T(“DSN=zhuxue”),CDatabase::noOdbcDialog);//zhuxue为数据源名称
2.关联记录集
CRecordset recset(&database);
3.查询记录
CString sSql1=“";
sSql1 = ”SELECT * FROM tablename“;
recset.Open(CRecordset::forwardOnly, sSql1, CRecordset::readOnly);
int ti=0;
CDBVariant var;//var可以转换为其他类型的值
while(!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue(”id“,var);
jiangxiang[ti].id=var.m_iVal;
recset.GetFieldValue(”name“, jiangxiang[ti].name);
ti++;
recset.MoveNext();
}
recset.Close();//关闭记录集
4.执行sql语句
CString sSql=”“;
sSql+=”delete * from 院系审核“;//清空表
database.ExecuteSQL(sSql);
sSql也可以为Insert ,Update等语句
5.读取字段名
sSql = ”SELECT * FROM Sheet1“;
//读取的文件有Sheet1表的定义,或为本程序生成的表.// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
int excelColCount=recset.GetODBCFieldCount();//列数
CString excelfield[30];
//得到记录集的字段集合中的字段的总个数
for(i=0;i { CODBCFieldInfo fieldinfo; recset.GetODBCFieldInfo(i,fieldinfo); excelfield[i].name =fieldinfo.m_strName;//字段名 } 6.打开excel文件 CString sDriver = ”MICROSOFT EXCEL DRIVER(*.XLS)“;// Excel安装驱动 CString sSql,sExcelFile;//sExcelFile为excel的文件路径 TRY { // 创建进行存取的字符串 sSql.Format(”DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=/“%s/”;DBQ=%s“,sDriver, sExcelFile, sExcelFile); // 创建数据库(既Excel表格文件) if(database.OpenEx(sSql,CDatabase::noOdbcDialog)) { //可以把excel作为一个数据库操作 } } catch(e) { TRACE1(”Excel驱动没有安装: %s“,sDriver); AfxMessageBox(”读取失败,请检查是否定义数据区Sheet1“); } 3.DAO连接 DAO(Data Access Object)是一组Microsoft Access/Jet数据库引擎的COM自动化接口.DAO直接与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来说,属于高层的数据库接口.4.OLE 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>数据使用程序 数据使用程序对存储在数据提供程序中的数据进行使用和控制.OLE 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()函数先对命令进行准备,对于支持命令的数据源,可以提高程序的灵活性和健壮性。 在stdafx.h头文件里,加入如下代码。#include 在打开数据源,会话,行集对象后就可以获取数据了。所获取的数据类型取决于所用的存取程序,可能需要绑定列。按以下步骤。 1、用正确的命令打开行集对象。 2、如果使用CManualAccessor,在使用之前与相应列进行绑定。要绑定列,可以用函数GetColumnInfo,如下所示: // Get the column information ULONG ulColumns = 0;DBCOLUMNINFO* pColumnInfo = NULL;LPOLESTR pStrings = NULL;if(rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings)!= S_OK)AfxThrowOLEDBException(rs.m_pRowset, IID_IColumnsInfo);struct MYBIND* pBind = new MYBIND[ulColumns];rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns);for(ULONG l=0;l 3、用while循环来取数据。在循环中,调用MoveNext来测试光标的返回值是否为S_OK,如下所示: while(rs.MoveNext()== S_OK){ // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData()} 4、在while循环内,可以通过不同的存取程序获取数据。1)如果使用的是CAccessor类,可以通过使用它们的数据成员进行直接访问。如下所示: 2)如果使用的是CDynamicAccessor 或CDynamicParameterAccessor 类,可以通过GetValue或GetColumn函数来获取数据。可以用GetType来获取所用数据类型。如下所示: while(rs.MoveNext()== S_OK){ // Use the dynamic accessor functions to retrieve your // data ULONG ulColumns = rs.GetColumnCount(); for(ULONG i=0;i { rs.GetValue(i); } } 3)如果使用的是CManualAccessor,可以指定自己的数据成员,绑定它们。就可以直接存取。如下所示: while(rs.MoveNext()== S_OK){ // Use the data members you specified in the calls to // AddBindEntry.wsprintf(”%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的同行,我撰写了这篇文章。本文包含如下内容: 1.OLE DB写数据库; 2.OLE DB读数据库; 3.OLE DB对二进制数据(text、ntext、image等)的处理。 首先来看看对SQL Server进行写操作的代码,有一定VC基础的读者应该可以很顺利地看懂。OLE DB写数据库,就是这么简单! 注: 1.以下代码中使用的模板类EAutoReleasePtr 2.以下代码均在UNICODE环境下编译,因为执行的SQL语句必须是UNICODE的。设置工程为UNICODE的方法是:首先在project->settings->C/C++的属性页中的Preprocessor中,删除_MBCS写入UNICODE,_UNICODE。然后在link属性页中Category中选择output,在Entry-Point symbol 中添加wWinMainCRTStartup。 EAutoReleasePtr //失败,可能是因为数据库没有启动、用户名密码错等等 return;}EAutoReleasePtr //出错 return;}EAutoReleasePtr //出错 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(100.0)“));//...其中几个函数的代码如下: 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 HRESULT hResult = ::CoCreateInstance(CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER,IID_IDataInitialize,(void**)&pIDataInitialize); if(FAILED(hResult)) { return hResult; } EAutoReleasePtr 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 = pIDBInitialize.Detach(); return S_OK;} HRESULT CreateSession(IDBInitialize* pIDBInitialize, IOpenRowset** ppIOpenRowset){ ASSERT(pIDBInitialize!= NULL && ppIOpenRowset!= NULL); EAutoReleasePtr HRESULT hResult = pIDBInitialize->QueryInterface(IID_IDBCreateSession,(void**)&pSession); if(FAILED(hResult)) { return hResult; } EAutoReleasePtr hResult = pSession->CreateSession(NULL, IID_IOpenRowset,(IUnknown**)&pIOpenRowset); if(FAILED(hResult)) { return hResult; } * ppIOpenRowset = pIOpenRowset.Detach(); return S_OK;} HRESULT CreateCommand(IOpenRowset* pIOpenRowset, ICommand** ppICommand, ICommandText** ppICommandText){ ASSERT(pIOpenRowset!= NULL && ppICommand!= NULL && ppICommandText!= NULL); HRESULT hResult; EAutoReleasePtr { EAutoReleasePtr 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 hResult = pICommand->QueryInterface(&pICommandText); if(FAILED(hResult)) { return hResult; } * ppICommand = pICommand.Detach(); * ppICommandText = pICommandText.Detach(); 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 return;} EAutoReleasePtr 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;