亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ADO技術(shù)動(dòng)態(tài)創(chuàng)建SQL Server數(shù)據(jù)庫

        2007-01-01 00:00:00
        計(jì)算機(jī)時(shí)代 2007年3期

        摘要:為了保存程序運(yùn)行過程中產(chǎn)生的臨時(shí)數(shù)據(jù),比較好的做法是創(chuàng)建動(dòng)態(tài)數(shù)據(jù)庫,這既能靈活地處理各種類型格式的臨時(shí)數(shù)據(jù),又能節(jié)省存儲(chǔ)空間。文章在Visual c++數(shù)據(jù)庫應(yīng)用程序中,利用ADO對(duì)象連接SQL Server數(shù)據(jù)源。然后通過調(diào)用ADO對(duì)象的函數(shù)來執(zhí)行SQL語句,以動(dòng)態(tài)地創(chuàng)建SQL Server數(shù)據(jù)庫。

        關(guān)鍵詞:Vc++;ADO;動(dòng)態(tài)創(chuàng)建;SQL Server數(shù)據(jù)庫;SQL語句

        0引言

        在數(shù)據(jù)庫應(yīng)用程序運(yùn)行過程中,有時(shí)會(huì)產(chǎn)生一些臨時(shí)性的數(shù)據(jù),它們可能是某個(gè)計(jì)算的中間結(jié)果,也可能是用于與其他系統(tǒng)進(jìn)行交換的數(shù)據(jù),或者是用于報(bào)表輸出的數(shù)據(jù)等,這些數(shù)據(jù)雖然是臨時(shí)產(chǎn)生并被使用的,但在使用完成之前也需要進(jìn)行保存,而保存這些數(shù)據(jù)的方法不外乎兩種:用文件來保存和用數(shù)據(jù)庫來保存。若用文件來保存這些數(shù)據(jù),則由于數(shù)據(jù)格式的原因會(huì)給數(shù)據(jù)的處理帶來不便,因而用數(shù)據(jù)庫來保存就成為一般常用的解決方法。

        保存數(shù)據(jù)的數(shù)據(jù)庫一般可以事先創(chuàng)建也可以動(dòng)態(tài)創(chuàng)建。事先創(chuàng)建是指在程序運(yùn)行之前創(chuàng)建好數(shù)據(jù)庫,動(dòng)態(tài)創(chuàng)建是指在程序運(yùn)行過程中創(chuàng)建數(shù)據(jù)庫。前者方法簡(jiǎn)便,但缺少了靈活性,因?yàn)槭孪葎?chuàng)建的數(shù)據(jù)庫的結(jié)構(gòu)固定,這必然限制了臨時(shí)數(shù)據(jù)的類型、格式和范圍,而且事先創(chuàng)建的數(shù)據(jù)庫在多數(shù)時(shí)間內(nèi)有可能是閑置的,這也造成了存儲(chǔ)空間的浪費(fèi)。較好的解決方案是在產(chǎn)生臨時(shí)性數(shù)據(jù)時(shí),根據(jù)需要?jiǎng)討B(tài)地創(chuàng)建數(shù)據(jù)庫以保存臨時(shí)數(shù)據(jù),在處理完成之后刪除動(dòng)態(tài)創(chuàng)建的數(shù)據(jù)庫。本文給出了一種動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫的方法。

        1數(shù)據(jù)庫動(dòng)態(tài)創(chuàng)建技術(shù)

        在vc++程序中動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫,需要通過數(shù)據(jù)庫接口來實(shí)現(xiàn)。vc++為開發(fā)數(shù)據(jù)庫應(yīng)用程序提供了多種數(shù)據(jù)庫訪問接口,主要有:ODBC(開放數(shù)據(jù)庫互連)、DAO(數(shù)據(jù)訪問對(duì)象)、OLE DB(對(duì)象鏈接與嵌入數(shù)據(jù)庫)和ADO(ActiveX數(shù)據(jù)對(duì)象)等。其中,DAO數(shù)據(jù)庫接口主要用于Access數(shù)據(jù)庫的訪問,在微軟的MFC類庫中提供了相關(guān)的DAO類(cDaoDatabase類和CDaoTableDef類),通過定義這些類的對(duì)象并調(diào)用相應(yīng)的成員函數(shù)就可以實(shí)現(xiàn)Access數(shù)據(jù)庫和表的動(dòng)態(tài)創(chuàng)建。對(duì)于ODBC和OLE DB訪問接口,MFC中雖然也提供了相關(guān)的類,但沒有提供用于創(chuàng)建數(shù)據(jù)庫和表的成員函數(shù)。

        ADO是微軟極力推薦使用的最新的數(shù)據(jù)庫訪問技術(shù),它已經(jīng)成為目前數(shù)據(jù)庫開發(fā)的主流。因此,針對(duì)ADO數(shù)據(jù)庫訪問技術(shù),如何實(shí)現(xiàn)sQL Server數(shù)據(jù)庫和表的動(dòng)態(tài)創(chuàng)建,就成為編程人員較為關(guān)心的一項(xiàng)技術(shù)。

        1.1 ADO對(duì)象

        ADO對(duì)象模型包括以下幾個(gè)對(duì)象:Connection對(duì)象、Error對(duì)象、Command對(duì)象、Parameter對(duì)象、Recordset對(duì)象和Field對(duì)象,其中Connection、Command和Recordset三個(gè)對(duì)象是主體對(duì)象,它們可以被獨(dú)立創(chuàng)建和釋放。

        Connection對(duì)象用來建立和維護(hù)與數(shù)據(jù)源的連接,對(duì)數(shù)據(jù)源的任何操作都需要一個(gè)Connection對(duì)象。Command對(duì)象用來創(chuàng)建和執(zhí)行對(duì)數(shù)據(jù)庫的操作命令,可以使用該對(duì)象執(zhí)行SQL語句或調(diào)用存儲(chǔ)過程,Command對(duì)象執(zhí)行后將返回一個(gè)Recordset對(duì)象。Recordset對(duì)象包含執(zhí)行數(shù)據(jù)庫操作后返回的—個(gè)記錄集。通過該對(duì)象可以瀏覽和更新數(shù)據(jù)庫中保存的記錄。

        一個(gè)基于ADO數(shù)據(jù)庫訪問技術(shù)的應(yīng)用程序通常是使用Connection對(duì)象建立與數(shù)據(jù)源的連接,然后使用Command對(duì)象給出對(duì)數(shù)據(jù)庫操作的命令,最后通過Recordset對(duì)象對(duì)結(jié)果記錄集進(jìn)行瀏覽、更新等操作。

        在程序中要?jiǎng)討B(tài)創(chuàng)建數(shù)據(jù)庫,可以通過Connection對(duì)象來完成。首先通過該對(duì)象建立與數(shù)據(jù)源的連接,然后調(diào)用該對(duì)象的Execute函數(shù)來執(zhí)行SQL語句實(shí)現(xiàn)數(shù)據(jù)庫的創(chuàng)建。

        1.2創(chuàng)建數(shù)據(jù)庫和表的SQL語句

        (1)創(chuàng)建數(shù)據(jù)庫的SQL語句

        CREATE DATABASE語句用來創(chuàng)建用戶數(shù)據(jù)庫。創(chuàng)建一個(gè)用戶數(shù)據(jù)庫的語法格式如下:

        CREATE DATABASE database_name

        ON(NAME=logical file name,F(xiàn)ILENAME=‘os—file—name',

        SIZE=size,MAXSIZE=max_size I UNLIMITED,

        FLIEGROWTH=growth_increment)

        LOG ON(NAME=logical file name,F(xiàn)ILENAME=os—file—name',

        SIZE=size,MAXSIZE=max_sizelUNLIMITED,

        FLIEGROWTH=growth_increment)

        以上語法格式中,大寫的字符串是sQL關(guān)鍵字,小寫形式的字符串是實(shí)際使用時(shí)由用戶替換的參數(shù)。其中,參數(shù)database_name是要?jiǎng)?chuàng)建的數(shù)據(jù)庫名,logical_file_name是邏輯文件名,os_file_name是操作系統(tǒng)下的文件名和路徑,size是文件的初始容量,max_size是文件的最大容量,growth_increment是文件空間每次的增加量。在ON后面括號(hào)內(nèi)的小寫字符串是數(shù)據(jù)庫文件的屬性參數(shù),在LOG ON后面的括號(hào)內(nèi)的小寫字符串是事務(wù)日志文件的屬性參數(shù)。

        (2)刪除數(shù)據(jù)庫SQL語句

        DROP DATABASE語句用于刪除數(shù)據(jù)庫,該語句的語法格式如下:

        DROP DATABASE database_name

        其中,database_name是要?jiǎng)h除的數(shù)據(jù)庫名。

        (3)創(chuàng)建表的SQL語句

        CREATE TABLE語句用于創(chuàng)建—個(gè)表,其完整語法格式較為繁瑣,在此也只說明本文實(shí)例程序中所用的語法格式。

        CREATE TABLE database_name.owner.table_name

        (column_namel data_type[NULLINOT NULL]

        [PRIMARY KEY],

        column_name2 data_type[NULLIOT NULL][PRIMARY KEY],

        ……

        column_namen data_type[NULLINOT NULL][PRIMARY KEY])

        其中,database_name是要在其中創(chuàng)建表的數(shù)據(jù)庫名,owner是表所有者的用戶ID,table_name是要?jiǎng)?chuàng)建的表名,column_namel—column_namen是表中的列名,data_type是列的數(shù)據(jù)類型。

        (4)刪除表的SQL語句

        DROP TABLE語句用于刪除表。該語句的語法格式如下:

        DROP TABLE database_name.dbo.table_name

        其中,database_name是要?jiǎng)h除的表所在的數(shù)據(jù)庫,table_name是要?jiǎng)h除的表名。

        2動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫的實(shí)現(xiàn)

        2.1 ADO對(duì)象與數(shù)據(jù)源的連接

        在MFC中,沒有可與ADO一起使用的類,因此,若要在Visual c++程序中使用ADO對(duì)象,首先需要導(dǎo)入ADO動(dòng)態(tài)鏈接庫,在創(chuàng)建的VC工程的stdafx.h頭文件中添加如下代碼:

        #import“C:\Program Files\Common Files\System\ado\

        msadol 5.dll\"\no__namespace rename(“EOF”,“adoEOF”)

        以上代碼的作用是告訴編譯器將動(dòng)態(tài)鏈接庫文件msad015.dU引入到程序中,不使用ADO的命名空間,并且為了避免沖突,將符號(hào)常量EOF改名為adoEOF。

        ADO是基于COM技術(shù)的,因此,在使用ADO對(duì)象之前必須初始化COM環(huán)境,在VC工程應(yīng)用類的InitInstance成員函數(shù)中添加如下初始化COM環(huán)境的代碼:

        ::ColnitiaUze(NULL);

        在結(jié)束ADO對(duì)象的使用后,需要調(diào)用以下代碼釋放程序占用的COM資源。在VC工程應(yīng)用類的ExitInstance成員函數(shù)中添加如下代碼,將初始化的對(duì)象釋放,清除為ADO對(duì)象準(zhǔn)備的COM環(huán)境。

        ::CoUninitialize():

        在導(dǎo)入的ADO庫中包含3個(gè)基本接口:_ConnectionPtr接口、—commandPtr接口和_RecordsetPtr接口。其中,_ConnectionPtr接口用來創(chuàng)建一個(gè)數(shù)據(jù)源連接或執(zhí)行一條不返回結(jié)果的sQL語句。因此,通過_ConnectionPtr接口執(zhí)行創(chuàng)建數(shù)據(jù)庫的SQL語句,就可以實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫。

        使用ConnectionPtr接口連接數(shù)據(jù)源的步驟如下:

        (1)聲明一個(gè)Connection對(duì)象指針;

        (2)調(diào)用Createlnstance函數(shù)創(chuàng)建一個(gè)Connection對(duì)象實(shí)例;

        (3)調(diào)用open函數(shù)建立到數(shù)據(jù)源的連接。

        其中,聲明的Connection對(duì)象指針如果要被多個(gè)函數(shù)使用,則應(yīng)將其聲明為類的成員變量。筆者的實(shí)例程序是基于對(duì)話框的應(yīng)用程序,因此,將Connection對(duì)象指針聲明為主對(duì)話框類的成員。代碼如下:

        -ConnectionPtr m_pConn;

        建立Connection對(duì)象到數(shù)據(jù)源連接的Open函數(shù)的原型為:HRESULT Open Lbstr_t ConnectionString,一bstr—t UserlD.

        _bstr_t Password,long Options);

        其中,參數(shù)的含義如下:

        ConnectionString:包含連接信息的字符串;

        UserlD:連接到數(shù)據(jù)源的用戶ID;

        Password:連接到數(shù)據(jù)源的密碼;

        Options:指明連接是同步進(jìn)行還是異步進(jìn)行,該參數(shù)可以是如下兩個(gè)枚舉常量:adConnectUnspecified(同步)和adAsyncConnect(異步)。

        在這里,需要特別說明的是ConnectionStfing參數(shù)的格式。在實(shí)際應(yīng)用中,根據(jù)所用數(shù)據(jù)庫軟件的不同,ConnecfionStdng參數(shù)的格式也有所不同。以下是筆者測(cè)試通過的連接sQLServer 2000數(shù)據(jù)源的示例代碼:

        m_pConn.Createlnstance(_uuidof(ConnectJon)):

        m_pConn->Open('’Provider=SQLOLEDB.1:

        Integrated Security=SSPI;Persist Security Info=False;

        Data Source:Igtf\",.1Ill。lllI adConnectUnspecified);

        其中,代碼中的lgff是SQL Server服務(wù)器名,讀者在驗(yàn)證時(shí)需要根據(jù)自己的具體情況進(jìn)行修改。以上代碼可以添加到主對(duì)話框類的OnlnitDialog成員函數(shù)中。

        從示例代碼可以看出,ConnectionString參數(shù)的格式比較繁瑣,初學(xué)者不容易理解和掌握。不過,微軟為我們提供了一種可視化的解決方法,就是使用通用數(shù)據(jù)連接文件來建立和測(cè)試ADO的連接屬性。數(shù)據(jù)連接文件的使用方法是:

        (1)在VC工程文件夾中新建一個(gè)文本文件,然后將該文.件的擴(kuò)展名改為udl;

        (2)雙擊該文件打開“數(shù)據(jù)鏈接屬性”對(duì)話框,在“提供程序”標(biāo)簽頁中選擇Microsoft OLE DB Provider for Server項(xiàng),如圖l所示。

        (3)在“連接”標(biāo)簽頁中,選擇或輸入SQL Server 2000服務(wù)器名稱,如圖2所示。

        (4)單擊“連接”標(biāo)簽頁中的“測(cè)試連接”按鈕,測(cè)試連接屬性設(shè)置是否正確,若彈出的對(duì)話框中顯示“測(cè)試連接成功”,則單擊“確定”按鈕完成數(shù)據(jù)連接文件的設(shè)置。

        數(shù)據(jù)連接文件設(shè)置完成后,就可以將前面Open函數(shù)的調(diào)用代碼改為:

        m._pConn->Open(“File Name=mydata.udl”,””,””,

        adConnectUnspecified);

        使用數(shù)據(jù)連接文件的好處不僅僅是簡(jiǎn)化了連接屬性的設(shè)置,還有利于數(shù)據(jù)庫應(yīng)用程序在用戶機(jī)器上的安裝和調(diào)試。當(dāng)我們將開發(fā)好的數(shù)據(jù)庫應(yīng)用程序安裝到用戶機(jī)器上時(shí),由于運(yùn)行環(huán)境發(fā)生了改變,有時(shí)就需要重新修改程序代碼進(jìn)行連接調(diào)試。如果我們使用數(shù)據(jù)連接文件來設(shè)置連接屬性,則在程序安裝到用戶機(jī)器上后,只需要重新設(shè)置一下數(shù)據(jù)連接文件,而不用修改程序就可以正常運(yùn)行了。

        在應(yīng)用程序中,一般在使用完成數(shù)據(jù)庫后,應(yīng)該關(guān)閉與數(shù)據(jù)源的連接。ADO在關(guān)閉連接的同時(shí),也將關(guān)閉所有使用這個(gè)連接的ADO對(duì)象。關(guān)閉連接的代碼如下:

        m_pConn->Close():

        m_pConn=NULL;

        以上代碼可以添加到主對(duì)話框類的OnDestroy成員函數(shù)中。

        2.2用SQL語句創(chuàng)建數(shù)據(jù)庫和表

        調(diào)用ADO對(duì)象模型中的Connection對(duì)象的Execute函數(shù)執(zhí)行sQL語句,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源的相關(guān)操作。該函數(shù)的原型如下:

        _RecordsetPtr Execute (_bstr_t CommandText,

        VARIANTRecordsAffected,long Options);

        其中,參數(shù)CommandText用于給出要執(zhí)行的SQL語句,RecordsAffected是執(zhí)行命令后的返回值,表明符合命令的行數(shù),Options用于指定命令的類型。

        如果要想創(chuàng)建數(shù)據(jù)庫和表,則只要在調(diào)用Execute函數(shù)時(shí),第1個(gè)參數(shù)給出創(chuàng)建數(shù)據(jù)庫和表的sQL語句即可。示例代碼如下:

        _bstr_t strSQL(\"CREATE DATABASE student

        ON(NAME=student,

        FILENAME=\'C:\\Pmgmm Files\\Microsoft SQL

        Server\\MSSQL\\data\\student_data.mdff)

        LOG ON(NAME:student_log,

        FILENAME=VC:\\Program Files\\Microsoft SQL

        Server\\MSSQL\\data\\student_log.IdfV)”);

        try{

        m_pConn->Execute(strSQL,NULL,adCmdText);

        catch Lcom_error&e){

        MessageBox(e.ErrorMessage()):

        以上示例代碼是創(chuàng)建—個(gè)名為student的數(shù)據(jù)庫。SQL語句中沒有指定數(shù)據(jù)庫文件和事務(wù)日志文件的初始容量,則默認(rèn)為1MB;沒有給出兩個(gè)文件的最大容量,則默認(rèn)為UNLIMITED。即增長(zhǎng)到硬盤滿為止;沒有給出文件的增量,則默認(rèn)為10%。

        創(chuàng)建表的示例代碼如下:

        _bstr_t strSQL(“create table student.dbo.用戶表(

        用戶名varchar(10)NO l NULL PRIMARY KEY.

        密碼varchar(16)NOT NULL,權(quán)限 integer)”):

        try{

        m_pConn->Execute(strSQL,NULL,adCmdText);

        catch(_com_errore){

        MessageBox(e.ErrorMessage()):

        以上代碼是在student數(shù)據(jù)庫中創(chuàng)建一個(gè)名為“用戶表”的表,該表有3個(gè)列:“用戶名”、“密碼”和“權(quán)限”,其中“用戶名”為主鍵,“用戶名”和“密碼”不能為空。

        2.3用SQL語句刪除數(shù)據(jù)庫和表

        刪除數(shù)據(jù)庫和表的SQL語句的語法相對(duì)較為簡(jiǎn)單,刪除student數(shù)據(jù)庫的示例代碼如下:

        bstr_t strSQL(\"DROP DATABASE student\"};

        try{

        m_pConn->Execute(strSQL,NULL.a(chǎn)dCmdText);

        }

        catch(_-com_error&e){

        MessageBox(e.ErrorMessage()):

        刪除“用戶表”的示例代碼如下:

        bstr_t strSQL(”DROP TABLE student.dbo.用戶表”):

        try{

        m_pConn->Execute(strSQL.NULL。adCmdText);

        }

        catch L-com_errore){

        MessageBox(e.ErrorMessage()):

        3結(jié)束語

        本文探討了利用ADO的Connection對(duì)象來連接數(shù)據(jù)源,然后通過調(diào)用Connection對(duì)象的Execute函數(shù)來執(zhí)行sQL語句,實(shí)現(xiàn)SQL Sewer 2000數(shù)據(jù)庫動(dòng)態(tài)創(chuàng)建的方法。讀者可以參照文中介紹的方法,或?qū)⑺械氖纠a添加到自己的應(yīng)用程序中,即可在自己的應(yīng)用程序中實(shí)現(xiàn)數(shù)據(jù)庫的動(dòng)態(tài)創(chuàng)建。文中雖然針對(duì)的是Visual c++編程工具和sQL Sewer 2000數(shù)據(jù)庫,但動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫和表的原理是一樣的,讀者只要理解了文中介紹的編程技術(shù),也同樣可以使用其他編程工具(如Visual Basic)來實(shí)現(xiàn)sQL Server 2000數(shù)據(jù)庫或其他常見關(guān)系型數(shù)據(jù)庫(如Oracle)的動(dòng)態(tài)創(chuàng)建。動(dòng)態(tài)創(chuàng)建的數(shù)據(jù)庫的訪問方法則與其他事先建立的數(shù)據(jù)庫的訪問方法相同。

        (注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。)

        国产一区二区视频在线免费观看| 国产69精品一区二区三区| 国产女人高潮的av毛片| 日本熟女人妻一区二区| 国产在线 | 中文| 国产无码夜夜一区二区| 亚洲专区在线观看第三页| 久久免费亚洲免费视频| 亚洲av大片在线免费观看| 职场出轨的人妻中文字幕| 成人网站免费看黄a站视频| 狠狠色噜噜狠狠狠97影音先锋| 日本看片一区二区三区| 一本之道久久一区二区三区| 未发育成型小奶头毛片av| 国产精品久久久| 久久国产精品99精品国产987| 精品不卡视频在线网址| 99精品国产成人一区二区| 久久无码av三级| 久久久久久AV无码成人| 午夜免费观看日韩一级片| 四虎影视成人永久免费观看视频 | 中国孕妇变态孕交xxxx| 欧美天欧美天堂aⅴ在线| 天啦噜国产精品亚洲精品| 婷婷开心五月亚洲综合| 夜夜春亚洲嫩草影院| 熟妇人妻无乱码中文字幕| 国产精品福利小视频| 久久久噜噜噜久久熟女| 领导边摸边吃奶边做爽在线观看 | 亚洲av熟女天堂久久天堂| 精品国产天堂综合一区在线| 国产成人vr精品a视频| 日日躁欧美老妇| 亚洲av天堂在线免费观看| 中文字幕日韩欧美一区二区三区 | 精品日韩国产欧美在线观看| 国内专区一区二区三区| 亚洲国产精彩中文乱码av|