范文為教學(xué)中作為模范的文章,,也常常用來指寫作的模板,。常常用于文秘寫作的參考,也可以作為演講材料編寫前的參考,。相信許多人會覺得范文很難寫,?下面我給大家整理了一些優(yōu)秀范文,,希望能夠幫助到大家,我們一起來看一看吧,。
數(shù)據(jù)庫工程師求職篇一
您好!我叫劉欣,,感謝您在百忙之中查看我的資料。我是新華學(xué)校的一名好范文,,在校期間,,我勤奮努力學(xué)習(xí),,成績優(yōu)異,多次獲學(xué)校學(xué)金,,掌握了windows,、c語言、pasca,、,數(shù)據(jù)結(jié)構(gòu),、數(shù)據(jù)庫原理等專業(yè)基礎(chǔ)知識。同時,,通過大量的實際操作,,我熟練掌握了dos,windows操作系統(tǒng),并對unix有一定的了解,,能夠獨立word,、excel、photoshop等應(yīng)用等軟件,,有一定的語言編程基礎(chǔ),,在經(jīng)濟(jì)信息及計算機(jī)應(yīng)用專業(yè)通過三年的學(xué)習(xí),我已具備了扎實的專業(yè)基礎(chǔ)知識功底,。
作為一名的學(xué)生,,我認(rèn)識到互聯(lián)網(wǎng)將在未來經(jīng)濟(jì)中發(fā)揮巨大的作用,所以,,業(yè)余時間我刻苦自學(xué)了很多網(wǎng)絡(luò)知識,。首先,在internet基礎(chǔ)應(yīng)用方面,,比如瀏覽網(wǎng)頁,,搜索引擎的使用,網(wǎng)上查找,,下載所需信息等都很熟練,。而且,我還不滿足于此,,進(jìn)一步學(xué)習(xí)了html語言,,和,frontpage,,dreamweaver等網(wǎng)頁編輯軟件,,firework,flash等網(wǎng)頁圖形處理軟件,,可以自如的進(jìn)行網(wǎng)頁編輯。現(xiàn)在我在互聯(lián)網(wǎng)上,,就已經(jīng)建立了自己的個人主頁,,并用文件傳輸協(xié)議(ftp)進(jìn)行維護(hù)和,。不斷的努力使我的網(wǎng)站日趨成熟。
當(dāng)然一個高素質(zhì)除了掌握扎實的專業(yè)知識,,還應(yīng)該具有豐富的人文知識,。我從小熱愛文學(xué),廣覽群書,,為我的寫作能力奠定了堅實的基礎(chǔ),。讀書以來,不斷參加校內(nèi)外征文活動,,發(fā)表過作品數(shù)篇,。特別在大學(xué)期間,被特邀為校報記者,參賽文章多次獲得校園文學(xué)獎。.此外,在英語的學(xué)習(xí)方面,我已具備了一定的聽,說,寫和會話能力,可以用英語進(jìn)行日常的交流,。
未來社會需要的是理論和實踐相結(jié)合的復(fù)合型,。學(xué)習(xí)之余,我參加了大量的社會實踐活動,,做家教,,去商場做過促銷員,從而鍛煉了自己吃苦耐勞,一絲不茍的工作做風(fēng).未來是一個充滿挑戰(zhàn)的世界,,鮮花和榮譽只能代表過去,。年輕的我希望公司給我展示自我的機(jī)會。沒有您伯樂的眼光,,對我來講那是一種遺憾,。因此,我非常希望能夠成為貴公司的一員,。我將以更大的熱情和勤奮上進(jìn)的工作態(tài)度投入到新的工作環(huán)境中去,,為公司的發(fā)展添磚加瓦。
愿公司的明天更美好!
此致
敬禮
數(shù)據(jù)庫工程師求職篇二
數(shù)據(jù)庫編程總結(jié)
當(dāng)前各種主流數(shù)據(jù)庫有很多,,包括oracle, ms sql server, sybase, informix, mysql, db2, interbase / firebird, postgresql, sqlite, sap/db, timesten, ms access等等,。數(shù)據(jù)庫編程是對數(shù)據(jù)庫的創(chuàng)建、讀寫等一列的操作,。數(shù)據(jù)庫編程分為數(shù)據(jù)庫客戶端編程與數(shù)據(jù)庫服務(wù)器端編程,。數(shù)據(jù)庫客戶端編程主要使用odbc api、ado,、,、oci、otl等方法,;數(shù)據(jù)庫服務(wù)端編程主要使用ole db等方法,。數(shù)據(jù)庫編程需要掌握一些訪問數(shù)據(jù)庫技術(shù)方法,還需要注意怎么設(shè)計高效的數(shù)據(jù)庫,、數(shù)據(jù)庫管理與運行的優(yōu)化,、數(shù)據(jù)庫語句的優(yōu)化,。
一、訪問數(shù)據(jù)庫技術(shù)方法
數(shù)據(jù)庫編程分為數(shù)據(jù)庫客戶端編程與數(shù)據(jù)庫服務(wù)器端編程,。數(shù)據(jù)庫客戶端編程主要使用odbc api,、ado、,、oci,、otl等方法;數(shù)據(jù)庫服務(wù)端編程主要使用ole db等方法,。
1,、幾種是數(shù)據(jù)庫訪問方法比較
odbc
api是一種適合數(shù)據(jù)庫底層開發(fā)的編程方法,odbc
api提供大量對數(shù)據(jù)源的操作,odbc
api能夠靈活地操作游標(biāo),支持各種幫定選項,在所有odbc相關(guān)編程中,api編程具有最高的執(zhí)行速度。dao提供了很好的數(shù)據(jù)庫編程的對象模型.但是,對數(shù)據(jù)庫的所有調(diào)用以及輸出的數(shù)據(jù)都必須通過access/jet數(shù)據(jù)庫引擎,這對于使用數(shù)據(jù)庫應(yīng)用程序,是嚴(yán)重的瓶頸,。
ole
db提供了com接口,,與傳統(tǒng)的數(shù)據(jù)庫接口相比,有更好的健壯性和靈活性,,具有很強(qiáng)的錯誤處理能力,能夠同非關(guān)系數(shù)據(jù)源進(jìn)行通信,。
ado最主要的優(yōu)點在于易于使用、速度快,、內(nèi)存支出少和磁盤遺跡小,。
是利用數(shù)據(jù)集的概念將數(shù)據(jù)庫數(shù)據(jù)讀入內(nèi)存中,然后在內(nèi)存中對數(shù)據(jù)進(jìn)行操作,,最后將數(shù)據(jù)集數(shù)據(jù)回寫到源數(shù)據(jù)庫中,。
otl 是 oracle, odbc and db2-cli template library 的縮寫,是一個c++編譯中操控關(guān)系數(shù)據(jù)庫的模板庫,,otl中直接操作oracle主要是通過oracle提供的oci接口進(jìn)行,,進(jìn)行操作db2數(shù)據(jù)庫則是通過cli接口來進(jìn)行,至于ms的數(shù)據(jù)庫和其它一些數(shù)據(jù)庫,,則otl只提供了odbc來操作的方式,。當(dāng)然oracle和db2也可以由otl間接使用odbc的方式來進(jìn)行操縱。具有以下優(yōu)點:跨平臺,;運行效率高,,與c語言直接調(diào)用api相當(dāng);開發(fā)效率高,,使用起來更簡單,,更簡潔;部署容易,,不需要ado組件,, framework 等。
2、vc數(shù)據(jù)庫編程幾種方法
vc數(shù)據(jù)庫編程幾種方法,,包括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的一部分,是一個標(biāo)準(zhǔn)數(shù)據(jù)庫接口,。它提供對關(guān)系數(shù)據(jù)庫訪問的統(tǒng)一接口,實現(xiàn)對異構(gòu)數(shù)據(jù)源的一致訪問。odbc數(shù)據(jù)訪問由以下部分組成:
<1>句柄(handles):odbc使用句柄來標(biāo)識odbc環(huán)境,、連接,、語句和描述器.<2>緩存區(qū)(buffers):
<3>數(shù)據(jù)類型(data
types)
<4>一致性級別(conformance
levels)
用odbc設(shè)計客戶端的一般步驟:
<1>分配odbc環(huán)境
<2>分配連接句柄
<3>連接數(shù)據(jù)源
<4>構(gòu)造和執(zhí)行sql語句
<5>獲得查詢結(jié)果
<6>斷開數(shù)據(jù)源的連接
<7>釋放odbc環(huán)境
odbc
api是一種適合數(shù)據(jù)庫底層開發(fā)的編程方法,odbc
api提供大量對數(shù)據(jù)源的操作,odbc
api能夠靈活地操作游標(biāo),支持各種幫定選項,在所有odbc相關(guān)編程中,api編程具有最高的執(zhí)行速度.因此,odbc
api編程屬于底層編程。
odbc連接
mfc
odbc是mfc對odbc進(jìn)行的封裝,以簡化對odbc
api的 調(diào)用,
odbc的封裝主要開發(fā)了cdatabase類和crecordset類
(1)cdatabase類
cdatabase類用于應(yīng)用程序建立同數(shù)據(jù)源的連接,。cdatabase類中包含一個m_hdbc變量,它代表了數(shù)據(jù)源的連接句柄,。如果要建立cdatabase類的實例,應(yīng)先調(diào)用該類的構(gòu)造函數(shù),再調(diào)用open函數(shù),通過調(diào)用,初始化環(huán)境變量,并執(zhí)行與數(shù)據(jù)源的連接。在通過close函數(shù)關(guān)閉數(shù)據(jù)源,。
cdatabase類提供了對數(shù)據(jù)庫進(jìn)行操作的函數(shù)及事務(wù)操作,。
(2)crecordset類
crecordset類定義了從數(shù)據(jù)庫接收或者發(fā)送數(shù)據(jù)到數(shù)據(jù)庫的成員變量,以實現(xiàn)對數(shù)據(jù)集的數(shù)據(jù)操作。
crecordset類的成員變量m_hstmt代表了定義該記錄集的sql語句句柄,m_nfields為記錄集中字段的個數(shù),m_nparams為記錄集所使用的參數(shù)個數(shù),。
crecordset的記錄集通過cdatabase實例的指針實現(xiàn)同數(shù)據(jù)源的連接,
odbc編程更適合于界面型數(shù)據(jù)庫應(yīng)用程序的開發(fā),但由于cdatabase類和crecordset類提供的數(shù)據(jù)庫操作函數(shù)有限,支持的游標(biāo)類型也有限,限制了高效的數(shù)據(jù)庫開發(fā),。在編程層次上屬于高級編程。
應(yīng)用實例: 1.打開數(shù)據(jù)庫
cdatabase database;
(_t(“dsn=zhuxue”),cdatabase::noodbcdialog);//zhuxue為數(shù)據(jù)源名稱
2.關(guān)聯(lián)記錄集
crecordset recset(&database);
3.查詢記錄
cstring ssql1=“";
ssql1 = ”select * from tablename“;
(crecordset::forwardonly, ssql1, crecordset::readonly);
int ti=0;
cdbvariant var;//var可以轉(zhuǎn)換為其他類型的值
while(!())
{
//讀取excel內(nèi)部數(shù)值
ldvalue(”id“,var);
jiangxiang[ti].id=var.m_ival;
ldvalue(”name“, jiangxiang[ti].name);
ti++;
xt();
}
();//關(guān)閉記錄集
4.執(zhí)行sql語句
cstring ssql=”“;
ssql+=”delete * from 院系審核“;//清空表
esql(ssql);
ssql也可以為insert ,update等語句
5.讀取字段名
ssql = ”select * from sheet1“;
//讀取的文件有sheet1表的定義,或為本程序生成的表.// 執(zhí)行查詢語句
(crecordset::forwardonly, ssql, crecordset::readonly);
int excelcolcount=cfieldcount();//列數(shù)
cstring excelfield[30];
//得到記錄集的字段集合中的字段的總個數(shù)
for(i=0;i
{
codbcfieldinfo fieldinfo;
cfieldinfo(i,fieldinfo);
excelfield[i].name =fieldinfo.m_strname;//字段名
}
6.打開excel文件
cstring sdriver = ”microsoft excel driver(*.xls)“;// excel安裝驅(qū)動
cstring ssql,sexcelfile;//sexcelfile為excel的文件路徑
try
{
// 創(chuàng)建進(jìn)行存取的字符串
(”driver={%s};dsn='';firstrowhasnames=1;readonly=false;create_db=/“%s/”;dbq=%s“,sdriver, sexcelfile, sexcelfile);
// 創(chuàng)建數(shù)據(jù)庫(既excel表格文件)
if((ssql,cdatabase::noodbcdialog))
{
//可以把excel作為一個數(shù)據(jù)庫操作
}
}
catch(e)
{
trace1(”excel驅(qū)動沒有安裝: %s“,sdriver);
afxmessagebox(”讀取失敗,請檢查是否定義數(shù)據(jù)區(qū)sheet1“);
}
連接
dao(data
access
object)是一組microsoft
access/直接與access/jet數(shù)據(jù)庫通信.通過jet數(shù)據(jù)庫引擎,dao也可以同其他數(shù)據(jù)庫進(jìn)行通信,。dao還封裝了access數(shù)據(jù)庫的結(jié)構(gòu)單元,通過dao可以直接修改access數(shù)據(jù)庫的結(jié)構(gòu),而不必使用sql的數(shù)據(jù)定義語言(ddl),。
dao的體系結(jié)構(gòu)如下:
dao封裝的類:
(1)cdaoworkspace:對dao工作區(qū)(數(shù)據(jù)庫處理事務(wù)管理器)的封裝
(2)cdaodatabase:對dao數(shù)據(jù)庫對象的封裝,負(fù)責(zé)數(shù)據(jù)庫連接.(3)cdaorecordset:對dao記錄集對象的封裝,代表所選的一組記錄.(4)cdaotabledef:對表定義對象的封裝,代表基本表或附加表定義.(5)cdaoquerydef:對查詢對象的封裝,包含所有查詢的定義.(6)cdaoexception:dao用于接收數(shù)據(jù)庫操作異常的類.(7)cdaofieldexchange
dao提供了很好的數(shù)據(jù)庫編程的對象模型.但是,對數(shù)據(jù)庫的所有調(diào)用以及輸出的數(shù)據(jù)都必須通過access/jet數(shù)據(jù)庫引擎,這對于使用數(shù)據(jù)庫應(yīng)用程序,是嚴(yán)重的瓶頸。
dao相對于odbc來說,,
db連接
ole
db對odbc進(jìn)行了兩方面的擴(kuò)展:一是提供了數(shù)據(jù)庫編程的ole接口即com,,二是提供了一個可用于關(guān)系型和非關(guān)系型數(shù)據(jù)源的接口。
ole
db提供了com接口,,與傳統(tǒng)的數(shù)據(jù)庫接口相比,,有更好的健壯性和靈活性,具有很強(qiáng)的錯誤處理能力,能夠同非關(guān)系數(shù)據(jù)源進(jìn)行通信,。
與odbc
api一樣,ole
db也屬于底層的數(shù)據(jù)庫編程接口,ole
db結(jié)合了odbc對關(guān)系數(shù)據(jù)庫的操作功能,,并進(jìn)行擴(kuò)展,可以訪問非關(guān)系數(shù)據(jù)庫,。
ole
db訪問數(shù)據(jù)庫的原理如下:
ole
db程序結(jié)構(gòu):
ole
db由客戶(consumer)和服務(wù)器(provider),。客戶是使用數(shù)據(jù)的應(yīng)用程序,它通過ole
db接口對數(shù)據(jù)提供者的數(shù)據(jù)進(jìn)行訪問和控制,。ole
db服務(wù)器是提供ole
db接口的軟件組件,。根據(jù)提供的內(nèi)容可以分為數(shù)據(jù)提供程序(data
provider)和服務(wù)提供程序(service
provider)。
程序結(jié)構(gòu)原理圖如下:
<1>數(shù)據(jù)提供程序
數(shù)據(jù)提供程序擁有自己的數(shù)據(jù)并把數(shù)據(jù)以表格的形式呈現(xiàn)給使用者使用.<2>服務(wù)提供程序
服務(wù)提供程序是數(shù)據(jù)提供程序和使用者的結(jié)合,。它是ole
db體系結(jié)構(gòu)中的中間件,它是ole
db數(shù)據(jù)源的使用者和數(shù)據(jù)使用程序的提供者
<3>數(shù)據(jù)使用程序
db開發(fā)程序的一般步驟:
<1>初始化com環(huán)境
<2>連接數(shù)據(jù)源
<3>打開對話
<4>執(zhí)行命令
<5>處理結(jié)果
<6>清除對象
應(yīng)用實例:
使用oledb編寫數(shù)據(jù)庫應(yīng)用程序 1
概述
ole db的存在為用戶提供了一種統(tǒng)一的方法來訪問所有不同種類的數(shù)據(jù)源,。ole db可以在不同的數(shù)據(jù)源中進(jìn)行轉(zhuǎn)換。利用ole db,,客戶端的開發(fā)人員在進(jìn)行數(shù)據(jù)訪問時只需把精力集中在很少的一些細(xì)節(jié)上,,而不必弄懂大量不同數(shù)據(jù)庫的訪問協(xié)議。ole db是一套通過com接口訪問數(shù)據(jù)的activex接口,。這個ole db接口相當(dāng)通用,,足以提供一種訪問數(shù)據(jù)的統(tǒng)一手段,而不管存儲數(shù)據(jù)所使用的方法如何,。同時,,ole db還允許開發(fā)人員繼續(xù)利用基礎(chǔ)數(shù)據(jù)庫技術(shù)的優(yōu)點,而不必為了利用這些優(yōu)點而把數(shù)據(jù)移出來,。
使用atl使用ole db數(shù)據(jù)使用程序
由于直接使用ole db的對象和接口設(shè)計數(shù)據(jù)庫應(yīng)用程序需要書寫大量的代碼,。為了簡化程序設(shè)計,visual c++提供了atl模板用于設(shè)計ole db數(shù)據(jù)應(yīng)用程序和數(shù)據(jù)提供程序,。利用atl模板可以很容易地將ole db與mfc結(jié)合起來,,使數(shù)據(jù)庫的參數(shù)查詢等復(fù)雜的編程得到簡化。mfc提供的數(shù)據(jù)庫類使ole db的編程更具有面向?qū)ο蟮奶匦?。viual c++所提供用于ole db的atl模板可分為數(shù)據(jù)提供程序的模板和數(shù)據(jù)使用程序的模板,。
使用atl模板創(chuàng)建數(shù)據(jù)應(yīng)用程序一般有以下幾步驟: 1)、創(chuàng)建應(yīng)用框架
2),、加入atl產(chǎn)生的模板類
3),、在應(yīng)用中使用產(chǎn)生的數(shù)據(jù)訪問對象3 不用atl使用ole db數(shù)據(jù)使用程序
利用atl模板產(chǎn)生數(shù)據(jù)使用程序較為簡單,,但適用性不廣,,不能動態(tài)適應(yīng)數(shù)據(jù)庫的變化。下面我們介紹直接使用mfc ole db類來生成數(shù)據(jù)使用程序,。模板的使用
ole db數(shù)據(jù)使用者模板是由一些模板組成的,,包括如下一些模板,下面對一些常用類作一些介紹,。1),、會話類 cdatasource類
cdatasource類與ole db的數(shù)據(jù)源對象相對應(yīng)。這個類代表了ole db數(shù)據(jù)提供程序和數(shù)據(jù)源之間的連接,。只有當(dāng)數(shù)據(jù)源的連接被建立之后,,才能產(chǎn)生會話對象,,可以調(diào)用open來打開數(shù)據(jù)源的連接。csession類
csession所創(chuàng)建的對象代表了一個單獨的數(shù)據(jù)庫訪問的會話,。一個用cdatasource類產(chǎn)生的數(shù)據(jù)源對象可以創(chuàng)建一個或者多個會話,,要在數(shù)據(jù)源對象上產(chǎn)生一個會話對象,需要調(diào)用函數(shù)open()來打開,。同時,,會話對象還可用于創(chuàng)建事務(wù)操作。
cenumeratoraccessor類
cenumeratoraccessor類是用來訪問枚舉器查詢后所產(chǎn)生的行集中可用數(shù)據(jù)提供程序的信息的訪問器,,可提供當(dāng)前可用的數(shù)據(jù)提供程序和可見的訪問器,。2),、訪問器類 cacessor類
caccessor類代表與訪問器的類型,。當(dāng)用戶知道數(shù)據(jù)庫的類型和結(jié)構(gòu)時,可以使用此類,。它支持對一個行集采用多個訪問器,,并且,存放數(shù)據(jù)的緩沖區(qū)是由用戶分配的,。cdynamicaccessor類
cdynamicaccessor類用來在程序運行時動態(tài)的創(chuàng)建訪問器,。當(dāng)系統(tǒng)運行時,可以動態(tài)地從行集中獲得列的信息,,可根據(jù)此信息動態(tài)地創(chuàng)建訪問器,。cmanualaccessor類
cmanualaccessor類中以在程序運行時將列與變量綁定或者是將參數(shù)與變量捆定。3),、行集類 crowset類
crowset類封裝了行集對象和相應(yīng)的接口,,并且提供了一些方法用于查詢、設(shè)置數(shù)據(jù)等,??梢杂胢ove()等函數(shù)進(jìn)行記錄移動,用getdata()函數(shù)讀取數(shù)據(jù),,用insert(),、delete()、setdata()來更新數(shù)據(jù),。cbulkrowset類
cbulkrowset類用于在一次調(diào)用中取回多個行句柄或者對多個行進(jìn)行操作,。carrayrowset類
carrayrowset類提供用數(shù)組下標(biāo)進(jìn)行數(shù)據(jù)訪問。4),、命令類 ctable類 ctable類用于對數(shù)據(jù)庫的簡單訪問,,用數(shù)據(jù)源的名稱得到行集,從而得到數(shù)據(jù),。ccommand類
ccommand類用于支持命令的數(shù)據(jù)源,??梢杂胦pen()函數(shù)來執(zhí)行sql命令,也可以prepare()函數(shù)先對命令進(jìn)行準(zhǔn)備,,對于支持命令的數(shù)據(jù)源,,可以提高程序的靈活性和健壯性。
在stdafx.h頭文件里,,加入如下代碼,。#include extern ccommodule _module;#include #include #include // if you are using schema templates 文件里,加入如下代碼,。#include ccommodule _module;決定使用何種類型的存取程序和行集,。獲取數(shù)據(jù)
在打開數(shù)據(jù)源,會話,,行集對象后就可以獲取數(shù)據(jù)了,。所獲取的數(shù)據(jù)類型取決于所用的存取程序,可能需要綁定列,。按以下步驟,。1、用正確的命令打開行集對象,。
2,、如果使用cmanualaccessor,在使用之前與相應(yīng)列進(jìn)行綁定,。要綁定列,,可以用函數(shù)getcolumninfo,如下所示: // get the column information ulong ulcolumns
= 0;dbcolumninfo* pcolumninfo = null;lpolestr pstrings
= null;if(umninfo(&ulcolumns, &pcolumninfo, &pstrings)!= s_ok)afxthrowoledbexception(rs.m_prowset, iid_icolumnsinfo);struct mybind* pbind = new mybind[ulcolumns];accessor(ulcolumns, &pbind[0], sizeof(mybind)*ulcolumns);for(ulong l=0;l
3、用while循環(huán)來取數(shù)據(jù),。在循環(huán)中,,調(diào)用movenext來測試光標(biāo)的返回值是否為s_ok,如下所示: while(xt()== s_ok){
// add code to fetch data here
// if you are not using an auto accessor, call a()}
4,、在while循環(huán)內(nèi),,可以通過不同的存取程序獲取數(shù)據(jù)。1)如果使用的是caccessor類,,可以通過使用它們的數(shù)據(jù)成員進(jìn)行直接訪問,。如下所示:
2)如果使用的是cdynamicaccessor 或cdynamicparameteraccessor 類,可以通過getvalue或getcolumn函數(shù)來獲取數(shù)據(jù),??梢杂胓ettype來獲取所用數(shù)據(jù)類型。如下所示: 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,可以指定自己的數(shù)據(jù)成員,,綁定它們,。就可以直接存取。如下所示: while(xt()== s_ok){
// use the data members you specified in the calls to
// tf(”%s“, szfoo);} 決定行集的數(shù)據(jù)類型
在運行時決定數(shù)據(jù)類型,,要用動態(tài)或手工的存取程序,。如果用的是手工存取程序,,可以用getcolumninfo函數(shù)得到行集的列信息。從這里可以得到數(shù)據(jù)類型,。4
總結(jié)
由于現(xiàn)在有多種數(shù)據(jù)源,,想要對這些數(shù)據(jù)進(jìn)行訪問管理的唯一途徑就是通過一些同類機(jī)制來實現(xiàn),如ole db,。高級ole db結(jié)構(gòu)分成兩部分:客戶和提供者,。客戶使用由提供者生成的數(shù)據(jù),。
就像其它基于com的多數(shù)結(jié)構(gòu)一樣,,ole db的開發(fā)人員需要實現(xiàn)很多的接口,其中大部分是模板文件,。
當(dāng)生成一個客戶對象時,,可以通過atl對象向?qū)е赶蛞粋€數(shù)據(jù)源而創(chuàng)建一個簡單的客戶。atl對象向?qū)z查數(shù)據(jù)源并創(chuàng)建數(shù)據(jù)庫的客戶端代理,。從那里,,可以通過ole db客戶模板使用標(biāo)準(zhǔn)的瀏覽函數(shù)。
當(dāng)生成一個提供者時,,向?qū)峁┝艘粋€很好的開端,它們僅僅是生成了一個簡單的提供者來列舉某一目錄下的文件,。然后,,提供者模板包含了ole db支持的完全補(bǔ)充內(nèi)容。在這種支持下,,用戶可以創(chuàng)建ole db提供者,,來實現(xiàn)行集定位策略、數(shù)據(jù)的讀寫以及建立書簽,。應(yīng)用案例:
visual c++中使用ole db讀寫sql server 在需要對數(shù)據(jù)庫進(jìn)行操作時,,ole db總是被認(rèn)為是一種效率最高但最難的方法。但是以我最近使用ole db的經(jīng)驗看來,,ole db的效率高則高矣,,但卻一點都不難。說它難恐怕主要是因為可參考的中文資料太少,,為了幫助以后需要接觸ole db的同行,,我撰寫了這篇文章。本文包含如下內(nèi)容:
db寫數(shù)據(jù)庫,; db讀數(shù)據(jù)庫,;
db對二進(jìn)制數(shù)據(jù)(text、ntext,、image等)的處理,。
首先來看看對sql server進(jìn)行寫操作的代碼,,有一定vc基礎(chǔ)的讀者應(yīng)該可以很順利地看懂。ole db寫數(shù)據(jù)庫,,就是這么簡單,!
注:
1.以下代碼中使用的模板類eautoreleaseptr
與atl中的ccomptr
類似,是一個在析構(gòu)時自動調(diào)用release的類,。ccomptr
的代碼在atlbase.h中定義,。
2.以下代碼均在unicode環(huán)境下編譯,因為執(zhí)行的sql語句必須是unicode的,。設(shè)置工程為unicode的方法是:首先在project->settings->c/c++的屬性頁中的preprocessor中,,刪除_mbcs寫入unicode,_unicode。然后在link屬性頁中category中選擇output,,在entry-point symbol 中添加wwinmaincrtstartup,。eautoreleaseptr
pidbinitialize;hresult hresult = connectdatabase(&pidbinitialize, _t(”127.0.0.1“), _t(“sa”), _t(”password“));if(failed(hresult)){
//失敗,可能是因為數(shù)據(jù)庫沒有啟動,、用戶名密碼錯等等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語句執(zhí)行失敗。在此處,,就是pbdata還未創(chuàng)建
return;}
// 創(chuàng)建表 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)“));//...其中幾個函數(shù)的代碼如下:
hresult connectdatabase(idbinitialize** ppidbinitialize, lpctstr pszdatasource, lpctstr pszuserid, lpctstr pszpassword){
assert(ppidbinitialize!= null && pszdatasource!= null && pszuserid!= null && pszpassword!= null);
uint utimeout = 15u;// 連接數(shù)據(jù)庫超時(秒)
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;}
以上就是寫數(shù)據(jù)庫的全部代碼了,是不是很簡單呢,?下面再來讀的,。
// 先用與上面代碼中一樣的步驟獲取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;}// 一個根據(jù)表中各字段的數(shù)值類型而定義的結(jié)構(gòu),,用于存儲返回的各字段的值
struct cloadlastfromdb {
dbstatus dwdsvolume;
dword
dwlenvolume;
float
fvolume;};
// 此處我們只查詢了一個字段。如果要查詢多個字段,,cloadlastfromdb中要添加相應(yīng)的字段定義,,下面的dbbinding也要相應(yīng)擴(kuò)充。dbbinding[].iordinal要分別指向各個字段,,dbbinding[].wtype要根據(jù)字段類型賦合適的值,。
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;
數(shù)據(jù)庫工程師求職篇三
尊敬的人力資源部領(lǐng)導(dǎo):
您好!我叫,,感謝您在百忙之中查看我的資料,。我是新華學(xué)校的一名應(yīng)屆畢業(yè)生,在校期間,,我勤奮努力學(xué)習(xí),,成績優(yōu)異,,多次獲學(xué)校學(xué)金,掌握了windows,、c語言,、pasca、,數(shù)據(jù)結(jié)構(gòu),、數(shù)據(jù)庫原理等專業(yè)基礎(chǔ)知識,。同時,通過大量的實際操作,,我熟練掌握了dos,windows操作系統(tǒng),,并對unix有一定的了解,能夠獨立word,、excel,、photoshop等應(yīng)用等軟件,有一定的語言編程基礎(chǔ),,在經(jīng)濟(jì)信息及計算機(jī)應(yīng)用專業(yè)通過三年的學(xué)習(xí),,我已具備了扎實的專業(yè)基礎(chǔ)知識功底。
作為一名的學(xué)生,,我認(rèn)識到互聯(lián)網(wǎng)將在未來經(jīng)濟(jì)中發(fā)揮巨大的作用,,所以,業(yè)余時間我刻苦自學(xué)了很多網(wǎng)絡(luò)知識,。首先,,在internet基礎(chǔ)應(yīng)用方面,比如瀏覽網(wǎng)頁,,搜索引擎的使用,網(wǎng)上查找,,下載所需信息等都很熟練,。而且,我還不滿足于此,,進(jìn)一步學(xué)習(xí)了html語言,,和,frontpage,,dreamweaver等網(wǎng)頁編輯軟件,,firework,flash等網(wǎng)頁圖形處理軟件,,可以自如的進(jìn)行網(wǎng)頁編輯?,F(xiàn)在我在互聯(lián)網(wǎng)上,就已經(jīng)建立了自己的個人主頁,,并用文件傳輸協(xié)議(ftp)進(jìn)行維護(hù)和,。不斷的努力使我的網(wǎng)站日趨成熟,。
當(dāng)然一個高素質(zhì)除了掌握扎實的專業(yè)知識,還應(yīng)該具有豐富的人文知識,。我從小熱愛文學(xué),,廣覽群書,為我的寫作能力奠定了堅實的基礎(chǔ),。讀書以來,,不斷參加校內(nèi)外征文活動,發(fā)表過作品數(shù)篇,。特別在大學(xué)期間,被特邀為校報記者,參賽文章多次獲得校園文學(xué)獎,。.此外,在英語的學(xué)習(xí)方面,我已具備了一定的聽,說,寫和會話能力,可以用英語進(jìn)行日常的交流。
未來社會需要的是理論和實踐相結(jié)合的復(fù)合型,。學(xué)習(xí)之余,,我參加了大量的社會實踐活動,做家教,,去商場做過促銷員,,從而鍛煉了自己吃苦耐勞,一絲不茍的工作做風(fēng).未來是一個充滿挑戰(zhàn)的世界,鮮花和榮譽只能代表過去,。年輕的我希望公司給我展示自我的機(jī)會,。沒有您伯樂的眼光,對我來講那是一種遺憾,。因此,,我非常希望能夠成為貴公司的一員。我將以更大的熱情和勤奮上進(jìn)的工作態(tài)度投入到新的工作環(huán)境中去,,為公司的發(fā)展添磚加瓦,。
愿公司的明天更美好!
此致
敬禮