在日常學習、工作或生活中,大家總少不了接觸作文或者范文吧,通過文章可以把我們那些零零散散的思想,聚集在一塊。寫范文的時候需要注意什么呢?有哪些格式需要注意呢?下面我給大家整理了一些優(yōu)秀范文,希望能夠幫助到大家,我們一起來看一看吧。
數(shù)據(jù)庫編程的求職信息篇一
當前各種主流數(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ù)庫服務器端編程。數(shù)據(jù)庫客戶端編程主要使用odbc api、ado、、oci、otl等方法;數(shù)據(jù)庫服務端編程主要使用ole db等方法。數(shù)據(jù)庫編程需要掌握一些訪問數(shù)據(jù)庫技術方法,還需要注意怎么設計高效的數(shù)據(jù)庫、數(shù)據(jù)庫管理與運行的優(yōu)化、數(shù)據(jù)庫語句的優(yōu)化。
一、訪問數(shù)據(jù)庫技術方法
數(shù)據(jù)庫編程分為數(shù)據(jù)庫客戶端編程與數(shù)據(jù)庫服務器端編程。數(shù)據(jù)庫客戶端編程主要使用odbc api、ado、、oci、otl等方法;數(shù)據(jù)庫服務端編程主要使用ole db等方法。
1、幾種是數(shù)據(jù)庫訪問方法比較
odbc
api是一種適合數(shù)據(jù)庫底層開發(fā)的編程方法,odbc
api提供大量對數(shù)據(jù)源的操作,odbc
api能夠靈活地操作游標,支持各種幫定選項,在所有odbc相關編程中,api編程具有最高的執(zhí)行速度。dao提供了很好的數(shù)據(jù)庫編程的對象模型.但是,對數(shù)據(jù)庫的所有調(diào)用以及輸出的數(shù)據(jù)都必須通過access/jet數(shù)據(jù)庫引擎,這對于使用數(shù)據(jù)庫應用程序,是嚴重的瓶頸。
ole
db提供了com接口,與傳統(tǒng)的數(shù)據(jù)庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關系數(shù)據(jù)源進行通信。
ado最主要的優(yōu)點在于易于使用、速度快、內(nèi)存支出少和磁盤遺跡小。
是利用數(shù)據(jù)集的概念將數(shù)據(jù)庫數(shù)據(jù)讀入內(nèi)存中,然后在內(nèi)存中對數(shù)據(jù)進行操作,最后將數(shù)據(jù)集數(shù)據(jù)回寫到源數(shù)據(jù)庫中。
otl 是 oracle, odbc and db2-cli template library 的縮寫,是一個c++編譯中操控關系數(shù)據(jù)庫的模板庫,otl中直接操作oracle主要是通過oracle提供的oci接口進行,進行操作db2數(shù)據(jù)庫則是通過cli接口來進行,至于ms的數(shù)據(jù)庫和其它一些數(shù)據(jù)庫,則otl只提供了odbc來操作的方式。當然oracle和db2也可以由otl間接使用odbc的方式來進行操縱。具有以下優(yōu)點:跨平臺;運行效率高,與c語言直接調(diào)用api相當;開發(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的一部分,是一個標準數(shù)據(jù)庫接口。它提供對關系數(shù)據(jù)庫訪問的統(tǒng)一接口,實現(xiàn)對異構數(shù)據(jù)源的一致訪問。odbc數(shù)據(jù)訪問由以下部分組成:
<1>句柄(handles):odbc使用句柄來標識odbc環(huán)境、連接、語句和描述器.<2>緩存區(qū)(buffers):
<3>數(shù)據(jù)類型(data
types)
<4>一致性級別(conformance
levels)
用odbc設計客戶端的一般步驟:
<1>分配odbc環(huán)境
<2>分配連接句柄
<3>連接數(shù)據(jù)源
<4>構造和執(zhí)行sql語句
<5>獲得查詢結果
<6>斷開數(shù)據(jù)源的連接
<7>釋放odbc環(huán)境
odbc
api是一種適合數(shù)據(jù)庫底層開發(fā)的編程方法,odbc
api提供大量對數(shù)據(jù)源的操作,odbc
api能夠靈活地操作游標,支持各種幫定選項,在所有odbc相關編程中,api編程具有最高的執(zhí)行速度.因此,odbc
api編程屬于底層編程。
odbc連接
mfc
odbc是mfc對odbc進行的封裝,以簡化對odbc
api的 調(diào)用,
odbc的封裝主要開發(fā)了cdatabase類和crecordset類
(1)cdatabase類
cdatabase類用于應用程序建立同數(shù)據(jù)源的連接。cdatabase類中包含一個m_hdbc變量,它代表了數(shù)據(jù)源的連接句柄。如果要建立cdatabase類的實例,應先調(diào)用該類的構造函數(shù),再調(diào)用open函數(shù),通過調(diào)用,初始化環(huán)境變量,并執(zhí)行與數(shù)據(jù)源的連接。在通過close函數(shù)關閉數(shù)據(jù)源。
cdatabase類提供了對數(shù)據(jù)庫進行操作的函數(shù)及事務操作。
(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ù)庫應用程序的開發(fā),但由于cdatabase類和crecordset類提供的數(shù)據(jù)庫操作函數(shù)有限,支持的游標類型也有限,限制了高效的數(shù)據(jù)庫開發(fā)。在編程層次上屬于高級編程。
應用實例: 1.打開數(shù)據(jù)庫
cdatabase database;
(_t(“dsn=zhuxue”),cdatabase::noodbcdialog);//zhuxue為數(shù)據(jù)源名稱
2.關聯(lián)記錄集
crecordset recset(&database);
3.查詢記錄
cstring ssql1=“";
ssql1 = ”select * from tablename“;
(crecordset::forwardonly, ssql1, crecordset::readonly);
int ti=0;
cdbvariant var;//var可以轉換為其他類型的值
while(!())
{
//讀取excel內(nèi)部數(shù)值
ldvalue(”id“,var);
jiangxiang[ti].id=var.m_ival;
ldvalue(”name“, jiangxiang[ti].name);
ti++;
xt();
}
();//關閉記錄集
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安裝驅動
cstring ssql,sexcelfile;//sexcelfile為excel的文件路徑
try
{
// 創(chuàng)建進行存取的字符串
(”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驅動沒有安裝: %s“,sdriver);
afxmessagebox(”讀取失敗,請檢查是否定義數(shù)據(jù)區(qū)sheet1“);
}
連接
dao(data
access
object)是一組microsoft
access/直接與access/jet數(shù)據(jù)庫通信.通過jet數(shù)據(jù)庫引擎,dao也可以同其他數(shù)據(jù)庫進行通信。dao還封裝了access數(shù)據(jù)庫的結構單元,通過dao可以直接修改access數(shù)據(jù)庫的結構,而不必使用sql的數(shù)據(jù)定義語言(ddl)。
dao的體系結構如下:
dao封裝的類:
(1)cdaoworkspace:對dao工作區(qū)(數(shù)據(jù)庫處理事務管理器)的封裝
(2)cdaodatabase:對dao數(shù)據(jù)庫對象的封裝,負責數(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ù)庫應用程序,是嚴重的瓶頸。
dao相對于odbc來說,
db連接
ole
db對odbc進行了兩方面的擴展:一是提供了數(shù)據(jù)庫編程的ole接口即com,二是提供了一個可用于關系型和非關系型數(shù)據(jù)源的接口。
ole
db提供了com接口,與傳統(tǒng)的數(shù)據(jù)庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關系數(shù)據(jù)源進行通信。
與odbc
api一樣,ole
db也屬于底層的數(shù)據(jù)庫編程接口,ole
db結合了odbc對關系數(shù)據(jù)庫的操作功能,并進行擴展,可以訪問非關系數(shù)據(jù)庫。
ole
db訪問數(shù)據(jù)庫的原理如下:
ole
db程序結構:
ole
db由客戶(consumer)和服務器(provider)??蛻羰鞘褂脭?shù)據(jù)的應用程序,它通過ole
db接口對數(shù)據(jù)提供者的數(shù)據(jù)進行訪問和控制。ole
db服務器是提供ole
db接口的軟件組件。根據(jù)提供的內(nèi)容可以分為數(shù)據(jù)提供程序(data
provider)和服務提供程序(service
provider)。
程序結構原理圖如下:
<1>數(shù)據(jù)提供程序
數(shù)據(jù)提供程序擁有自己的數(shù)據(jù)并把數(shù)據(jù)以表格的形式呈現(xiàn)給使用者使用.<2>服務提供程序
服務提供程序是數(shù)據(jù)提供程序和使用者的結合。它是ole
db體系結構中的中間件,它是ole
db數(shù)據(jù)源的使用者和數(shù)據(jù)使用程序的提供者
<3>數(shù)據(jù)使用程序
db開發(fā)程序的一般步驟:
<1>初始化com環(huán)境
<2>連接數(shù)據(jù)源
<3>打開對話
<4>執(zhí)行命令
<5>處理結果
<6>清除對象
應用實例:
使用oledb編寫數(shù)據(jù)庫應用程序 1
概述
ole db的存在為用戶提供了一種統(tǒng)一的方法來訪問所有不同種類的數(shù)據(jù)源。ole db可以在不同的數(shù)據(jù)源中進行轉換。利用ole db,客戶端的開發(fā)人員在進行數(shù)據(jù)訪問時只需把精力集中在很少的一些細節(jié)上,而不必弄懂大量不同數(shù)據(jù)庫的訪問協(xié)議。ole db是一套通過com接口訪問數(shù)據(jù)的activex接口。這個ole db接口相當通用,足以提供一種訪問數(shù)據(jù)的統(tǒng)一手段,而不管存儲數(shù)據(jù)所使用的方法如何。同時,ole db還允許開發(fā)人員繼續(xù)利用基礎數(shù)據(jù)庫技術的優(yōu)點,而不必為了利用這些優(yōu)點而把數(shù)據(jù)移出來。
使用atl使用ole db數(shù)據(jù)使用程序
由于直接使用ole db的對象和接口設計數(shù)據(jù)庫應用程序需要書寫大量的代碼。為了簡化程序設計,visual c++提供了atl模板用于設計ole db數(shù)據(jù)應用程序和數(shù)據(jù)提供程序。利用atl模板可以很容易地將ole db與mfc結合起來,使數(shù)據(jù)庫的參數(shù)查詢等復雜的編程得到簡化。mfc提供的數(shù)據(jù)庫類使ole db的編程更具有面向對象的特性。viual c++所提供用于ole db的atl模板可分為數(shù)據(jù)提供程序的模板和數(shù)據(jù)使用程序的模板。
使用atl模板創(chuàng)建數(shù)據(jù)應用程序一般有以下幾步驟: 1)、創(chuàng)建應用框架
2)、加入atl產(chǎn)生的模板類
3)、在應用中使用產(chǎn)生的數(shù)據(jù)訪問對象3 不用atl使用ole db數(shù)據(jù)使用程序
利用atl模板產(chǎn)生數(shù)據(jù)使用程序較為簡單,但適用性不廣,不能動態(tài)適應數(shù)據(jù)庫的變化。下面我們介紹直接使用mfc ole db類來生成數(shù)據(jù)使用程序。模板的使用
ole db數(shù)據(jù)使用者模板是由一些模板組成的,包括如下一些模板,下面對一些常用類作一些介紹。1)、會話類 cdatasource類
cdatasource類與ole db的數(shù)據(jù)源對象相對應。這個類代表了ole db數(shù)據(jù)提供程序和數(shù)據(jù)源之間的連接。只有當數(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)建事務操作。
cenumeratoraccessor類
cenumeratoraccessor類是用來訪問枚舉器查詢后所產(chǎn)生的行集中可用數(shù)據(jù)提供程序的信息的訪問器,可提供當前可用的數(shù)據(jù)提供程序和可見的訪問器。2)、訪問器類 cacessor類
caccessor類代表與訪問器的類型。當用戶知道數(shù)據(jù)庫的類型和結構時,可以使用此類。它支持對一個行集采用多個訪問器,并且,存放數(shù)據(jù)的緩沖區(qū)是由用戶分配的。cdynamicaccessor類
cdynamicaccessor類用來在程序運行時動態(tài)的創(chuàng)建訪問器。當系統(tǒng)運行時,可以動態(tài)地從行集中獲得列的信息,可根據(jù)此信息動態(tài)地創(chuàng)建訪問器。cmanualaccessor類
cmanualaccessor類中以在程序運行時將列與變量綁定或者是將參數(shù)與變量捆定。3)、行集類 crowset類
crowset類封裝了行集對象和相應的接口,并且提供了一些方法用于查詢、設置數(shù)據(jù)等??梢杂胢ove()等函數(shù)進行記錄移動,用getdata()函數(shù)讀取數(shù)據(jù),用insert()、delete()、setdata()來更新數(shù)據(jù)。cbulkrowset類
cbulkrowset類用于在一次調(diào)用中取回多個行句柄或者對多個行進行操作。carrayrowset類
carrayrowset類提供用數(shù)組下標進行數(shù)據(jù)訪問。4)、命令類 ctable類 ctable類用于對數(shù)據(jù)庫的簡單訪問,用數(shù)據(jù)源的名稱得到行集,從而得到數(shù)據(jù)。ccommand類
ccommand類用于支持命令的數(shù)據(jù)源??梢杂胦pen()函數(shù)來執(zhí)行sql命令,也可以prepare()函數(shù)先對命令進行準備,對于支持命令的數(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,在使用之前與相應列進行綁定。要綁定列,可以用函數(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來測試光標的返回值是否為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ù)成員進行直接訪問。如下所示:
2)如果使用的是cdynamicaccessor 或cdynamicparameteraccessor 類,可以通過getvalue或getcolumn函數(shù)來獲取數(shù)據(jù)。可以用gettype來獲取所用數(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
總結
由于現(xiàn)在有多種數(shù)據(jù)源,想要對這些數(shù)據(jù)進行訪問管理的唯一途徑就是通過一些同類機制來實現(xiàn),如ole db。高級ole db結構分成兩部分:客戶和提供者??蛻羰褂糜商峁┱呱傻臄?shù)據(jù)。
就像其它基于com的多數(shù)結構一樣,ole db的開發(fā)人員需要實現(xiàn)很多的接口,其中大部分是模板文件。
當生成一個客戶對象時,可以通過atl對象向導指向一個數(shù)據(jù)源而創(chuàng)建一個簡單的客戶。atl對象向導將會檢查數(shù)據(jù)源并創(chuàng)建數(shù)據(jù)庫的客戶端代理。從那里,可以通過ole db客戶模板使用標準的瀏覽函數(shù)。
當生成一個提供者時,向導提供了一個很好的開端,它們僅僅是生成了一個簡單的提供者來列舉某一目錄下的文件。然后,提供者模板包含了ole db支持的完全補充內(nèi)容。在這種支持下,用戶可以創(chuàng)建ole db提供者,來實現(xiàn)行集定位策略、數(shù)據(jù)的讀寫以及建立書簽。應用案例:
visual c++中使用ole db讀寫sql server 在需要對數(shù)據(jù)庫進行操作時,ole db總是被認為是一種效率最高但最難的方法。但是以我最近使用ole db的經(jīng)驗看來,ole db的效率高則高矣,但卻一點都不難。說它難恐怕主要是因為可參考的中文資料太少,為了幫助以后需要接觸ole db的同行,我撰寫了這篇文章。本文包含如下內(nèi)容:
db寫數(shù)據(jù)庫; db讀數(shù)據(jù)庫;
db對二進制數(shù)據(jù)(text、ntext、image等)的處理。
首先來看看對sql server進行寫操作的代碼,有一定vc基礎的讀者應該可以很順利地看懂。ole db寫數(shù)據(jù)庫,就是這么簡單!
注:
1.以下代碼中使用的模板類eautoreleaseptr
與atl中的ccomptr
類似,是一個在析構時自動調(diào)用release的類。ccomptr
的代碼在atlbase.h中定義。
2.以下代碼均在unicode環(huán)境下編譯,因為執(zhí)行的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(”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ù)值類型而定義的結構,用于存儲返回的各字段的值
struct cloadlastfromdb {
dbstatus dwdsvolume;
dword
dwlenvolume;
float
fvolume;};
// 此處我們只查詢了一個字段。如果要查詢多個字段,cloadlastfromdb中要添加相應的字段定義,下面的dbbinding也要相應擴充。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ù)庫編程的求職信息篇二
數(shù)據(jù)庫編程的自薦信例文,關鍵詞是自薦信,數(shù)據(jù)庫編程,
尊敬的人力資源部領導:
您好!我叫劉欣,感謝您在百忙之中查看我的資料。我是新華學校的一名好范文,在校期間,我勤奮努力學習,成績優(yōu)異,多次獲學校學金,掌握了windows、c語言、pasca、,數(shù)據(jù)結構、數(shù)據(jù)庫原理等專業(yè)基礎知識。同時,通過大量的實際操作,我熟練掌握了dos,windows操作系統(tǒng),并對unix有一定的了解,能夠獨立word、excel、photoshop等應用等軟件,有一定的語言編程基礎,在經(jīng)濟信息及計算機應用專業(yè)通過三年的學習,我已具備了扎實的專業(yè)基礎知識功底。
作為一名的學生,我認識到互聯(lián)網(wǎng)將在未來經(jīng)濟中發(fā)揮巨大的作用,所以,業(yè)余時間我刻苦自學了很多網(wǎng)絡知識。首先,在internet基礎應用方面,比如瀏覽網(wǎng)頁,搜索引擎的使用,網(wǎng)上查找,下載所需信息等都很熟練。而且,我還不滿足于此,進一步學習了html語言,和,frontpage,dreamweaver等網(wǎng)頁編輯軟件,firework,flash等網(wǎng)頁圖形處理軟件,可以自如的進行網(wǎng)頁編輯?,F(xiàn)在我在互聯(lián)網(wǎng)上,就已經(jīng)建立了自己的個人主頁,并用文件傳輸協(xié)議(ftp)進行維護和。不斷的努力使我的網(wǎng)站日趨成熟。
當然一個高素質(zhì)除了掌握扎實的專業(yè)知識,還應該具有豐富的人文知識。我從小熱愛文學,廣覽群書,為我的寫作能力奠定了堅實的基礎。讀書以來,不斷參加校內(nèi)外征文活動,發(fā)表過作品數(shù)篇。特別在大學期間,被特邀為校報記者,參賽文章多次獲得校園文學獎。.此外,在英語的學習方面,我已具備了一定的聽,說,寫和會話能力,可以用英語進行日常的交流。
未來社會需要的是理論和實踐相結合的復合型。學習之余,我參加了大量的社會實踐活動,做家教,去商場做過促銷員,從而鍛煉了自己吃苦耐勞,一絲不茍的工作做風.未來是一個充滿挑戰(zhàn)的世界,鮮花和榮譽只能代表過去。年輕的我希望公司給我展示自我的機會。沒有您伯樂的眼光,對我來講那是一種遺憾。因此,我非常希望能夠成為貴公司的一員。我將以更大的熱情和勤奮上進的工作態(tài)度投入到新的工作環(huán)境中去,為公司的發(fā)展添磚加瓦。
愿公司的明天更美好!
此致
敬禮
數(shù)據(jù)庫編程的求職信息篇三
尊敬的人力資源部領導:
您好!我叫,感謝您在百忙之中查看我的資料。我是新華學校的一名應屆畢業(yè)生,在校期間,我勤奮努力學習,成績優(yōu)異,多次獲學校學金,掌握了windows、c語言、pasca、,數(shù)據(jù)結構、數(shù)據(jù)庫原理等專業(yè)基礎知識。同時,通過大量的實際操作,我熟練掌握了dos,windows操作系統(tǒng),并對unix有一定的了解,能夠獨立word、excel、photoshop等應用等軟件,有一定的語言編程基礎,在經(jīng)濟信息及計算機應用專業(yè)通過三年的學習,我已具備了扎實的專業(yè)基礎知識功底。
作為一名的學生,我認識到互聯(lián)網(wǎng)將在未來經(jīng)濟中發(fā)揮巨大的作用,所以,業(yè)余時間我刻苦自學了很多網(wǎng)絡知識。首先,在internet基礎應用方面,比如瀏覽網(wǎng)頁,搜索引擎的使用,網(wǎng)上查找,下載所需信息等都很熟練。而且,我還不滿足于此,進一步學習了html語言,和,frontpage,dreamweaver等網(wǎng)頁編輯軟件,firework,flash等網(wǎng)頁圖形處理軟件,可以自如的進行網(wǎng)頁編輯?,F(xiàn)在我在互聯(lián)網(wǎng)上,就已經(jīng)建立了自己的個人主頁,并用文件傳輸協(xié)議(ftp)進行維護和。不斷的努力使我的網(wǎng)站日趨成熟。
當然一個高素質(zhì)除了掌握扎實的專業(yè)知識,還應該具有豐富的人文知識。我從小熱愛文學,廣覽群書,為我的寫作能力奠定了堅實的基礎。讀書以來,不斷參加校內(nèi)外征文活動,發(fā)表過作品數(shù)篇。特別在大學期間,被特邀為校報記者,參賽文章多次獲得校園文學獎。.此外,在英語的學習方面,我已具備了一定的聽,說,寫和會話能力,可以用英語進行日常的交流。
未來社會需要的是理論和實踐相結合的復合型。學習之余,我參加了大量的社會實踐活動,做家教,去商場做過促銷員,從而鍛煉了自己吃苦耐勞,一絲不茍的工作做風.未來是一個充滿挑戰(zhàn)的世界,鮮花和榮譽只能代表過去。年輕的我希望公司給我展示自我的機會。沒有您伯樂的眼光,對我來講那是一種遺憾。因此,我非常希望能夠成為貴公司的一員。我將以更大的熱情和勤奮上進的工作態(tài)度投入到新的工作環(huán)境中去,為公司的發(fā)展添磚加瓦。
愿公司的明天更美好!
此致
敬禮
【本文地址:http://www.aiweibaby.com/zuowen/1084136.html】