国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

用ADO管理SQL Server數(shù)據(jù)庫

2024-07-21 02:29:28
字體:
供稿:網(wǎng)友
  微軟公司的sqlserver是目前小型網(wǎng)絡(luò)中常用的數(shù)據(jù)庫管理系統(tǒng)之一。面向這種網(wǎng)絡(luò)數(shù)據(jù)庫的應(yīng)用程序也在日益增多,這種網(wǎng)絡(luò)數(shù)據(jù)庫應(yīng)用系統(tǒng)的正常運(yùn)行,一般都依賴于已經(jīng)存在的用戶數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫的工作當(dāng)然可以用sql server提供的sql enterprisemanager工具來完成,但是,如果能夠提供一種定制的數(shù)據(jù)庫管理工具,專門管理應(yīng)用系統(tǒng)需要的數(shù)據(jù)庫及其設(shè)備,對用戶來說無疑更加理想。

    現(xiàn)存問題

    我們知道,在使用createdatabase語句創(chuàng)建一個(gè)數(shù)據(jù)庫之前,必須存在一個(gè)有剩余空間的數(shù)據(jù)庫設(shè)備,或者事先使用diskinit語句創(chuàng)建一個(gè)新設(shè)備。但是這些語句含有很多必需的參數(shù),而且如果不使用sqlserver的管理工具,很多參數(shù)值往往難以確定。

    以創(chuàng)建數(shù)據(jù)庫設(shè)備的diskinit語句為例,這個(gè)語句的完整語法如下:

    diskinitname=‘logical_name',physname=‘physical_name',vdevno=virtual_device_number,size=number_of_2k_blocks[,vstart=virtual_address]

    其中name和size這兩個(gè)參數(shù)都很容易得到,麻煩的是物理名physname和虛擬設(shè)備號vdevno這兩個(gè)參數(shù)。前者要求是一個(gè)服務(wù)器上的物理文件全路徑名;后者要求在1~255之間找一個(gè)沒有被別的設(shè)備占用的號碼。而在編寫數(shù)據(jù)庫管理程序時(shí),用戶的服務(wù)器上有哪些設(shè)備號已經(jīng)被占用, sqlserver裝在哪個(gè)驅(qū)動器上,都是無法預(yù)料的。

    雖然,使用sqlserver的管理工具sqlenterprisemanager,可以非常方便地創(chuàng)建、刪除數(shù)據(jù)庫設(shè)備,或者擴(kuò)大一個(gè)已經(jīng)存在的數(shù)據(jù)庫,也可以非常方便地創(chuàng)建、刪除或者修改一個(gè)數(shù)據(jù)庫,但是,這個(gè)工具仍然要求我們輸入很多不太常用的參數(shù),界面稍顯復(fù)雜。

    所以,理想的情況是:用戶只需要按下一個(gè)命令按鈕,應(yīng)用程序需要的數(shù)據(jù)庫及其設(shè)備都能立即自動地創(chuàng)建好。

    解決方案

    為了實(shí)現(xiàn)這樣的目標(biāo),我們必須想辦法解決sql語句中的參數(shù)設(shè)置問題。

    1.創(chuàng)建設(shè)備的語句參數(shù)

    創(chuàng)建設(shè)備的語句即前面提到的diskinit語句。

    為了簡化問題,我們可以指定與數(shù)據(jù)庫名相同的設(shè)備文件名,并將設(shè)備文件保存在master設(shè)備所在的子目錄中。數(shù)據(jù)庫名是在設(shè)計(jì)應(yīng)用程序時(shí)已經(jīng)確定;而master設(shè)備所在的子目錄,可以從系統(tǒng)表sysdevices中查詢得到。這樣,設(shè)備文件的物理名參數(shù)就確定下來了。

    虛擬設(shè)備號的問題則比較復(fù)雜,因?yàn)閟ysdevices系統(tǒng)表中沒有“虛擬設(shè)備號”這樣一個(gè)字段,因此,必須另想辦法。

    對sqlserver的系統(tǒng)存儲過程sp_helpdevice進(jìn)行分析之后,我們發(fā)現(xiàn),虛擬設(shè)備號是“隱藏”在sysdevices系統(tǒng)表的low 字段中的,借助另一個(gè)系統(tǒng)表spt_values,可以找到每個(gè)設(shè)備的虛擬設(shè)備號。這樣,我們只需要在一個(gè)循環(huán)中找一下某個(gè)設(shè)備號是否存在于 sysdevices中,就可以
確定我們現(xiàn)在可用的虛擬設(shè)備號。

    至于數(shù)據(jù)庫設(shè)備的大小,我們不妨設(shè)得大一些,或者讓用戶指定一下也可以。

    2.創(chuàng)建數(shù)據(jù)庫的語句參數(shù)

    創(chuàng)建數(shù)據(jù)庫的語句如下:

    createdatabasedatabase_name[on{default|database_device}[=size][,database_device[=size]]...]
    [logondatabase_device[=size][,database_device[=size]]...][forload]

    其中,大部分參數(shù)都是可選的,我們只需要指定一個(gè)設(shè)備名及數(shù)據(jù)庫的大小即可,而數(shù)據(jù)庫名、設(shè)備名、大小在創(chuàng)建設(shè)備的時(shí)候已經(jīng)確定好了,所以,這個(gè)語句的參數(shù)不存在問題。

    具體實(shí)現(xiàn)

    使用普通的應(yīng)用開發(fā)工具visualbasic,我們就可以實(shí)現(xiàn)一個(gè)定制的數(shù)據(jù)庫管理程序。

    為了實(shí)現(xiàn)與數(shù)據(jù)庫服務(wù)器的連接,我們必須選擇一種數(shù)據(jù)庫訪問接口。雖然從vb訪問sqlserver
有很多接口可供選擇,但微軟最新的數(shù)據(jù)庫訪問接口 ado(activedataobjects)無疑是最有前途的,因?yàn)樗鼮榛跒g覽器的數(shù)據(jù)庫應(yīng)用系統(tǒng)的實(shí)現(xiàn)提供了可能性。

    以下是一些用于數(shù)據(jù)庫及其設(shè)備管理的常用函數(shù)。

    1.取當(dāng)前的工作數(shù)據(jù)庫 ----由于管理任務(wù)一般都必須在master庫中完成,因此,在執(zhí)行管理任務(wù)之前,最好保存當(dāng)前工作庫,以便完成任務(wù)之后再切換回去。

    publicfunctionsqlgetcurrentdatabasename(cnasadodb.connection)asstringdimssqlasstringdimrsasnewadodb.recordset
    onerrorgotoerrsqlgetcurrentdatabasenamessql=“selectcurrentdb=db_name()"rs.openssql,
    cnsqlgetcurrentdatabasename=trim$(rs!currentdb) rs.closeexitfunctionerrsqlgetcurrentdatabasename:sqlgetcurrentdatabasename
=“"endfunction

    2.判斷一個(gè)數(shù)據(jù)庫設(shè)備是否存在

    publicfunctionsqlexistdevicename(cnasadodb.connection,sdevnameasstring)asboolean

    '--按照名稱判斷一個(gè)設(shè)備是否存在,如果存在,返回1,否則返回0
    dimssqlasstringdimrsasnewadodb.recordsetdimbtmpasbooleanonerror
gotoerrsqlexistdevicenamessql=“
    selectcntdev=count(*)frommaster.dbo.sysdeviceswherename=‘“&sdevname&”'"rs.openssql,cnifrs!cntdev=0thenbtmp=falseelsebtmp=
    truers.closesqlexistdevicename=btmpexitfunctionerrsqlexistdevicename:

    sqlexistdevicename=falseendfunction

    3.判斷一個(gè)虛擬設(shè)備號是否被占用:sqlexistdevicenumber。

    4.找一個(gè)最小的尚未被占用的虛擬設(shè)備號:sqlgetunuseddevicenumber。

    5.取得sqlserver安裝目錄下的data子目錄路徑:sqlgetdatapath。

    6.創(chuàng)建一個(gè)新設(shè)備:sqlcreatedevice。

    7.創(chuàng)建一個(gè)新的數(shù)據(jù)庫:sqlcreatedatabase65。

    8.取數(shù)據(jù)庫設(shè)備的詳細(xì)信息:sqlgetdeviceinfo。

    9.?dāng)U大數(shù)據(jù)庫設(shè)備的尺寸:sqlexpanddevice。

    數(shù)據(jù)庫應(yīng)用系統(tǒng)在運(yùn)行一段之后,數(shù)據(jù)量的增大往往要求數(shù)據(jù)庫增大,進(jìn)而要求擴(kuò)大設(shè)備尺寸。可惜diskresize語句要求的尺寸參數(shù)為擴(kuò)大后的新尺寸,而非需要增加的尺寸。所以,必須事先查到設(shè)備的原有尺寸,才能使用diskresize語句。

    10.判斷一個(gè)數(shù)據(jù)庫是否存在:sqlexistdatabase。

    11.刪除一個(gè)數(shù)據(jù)庫:sqldropdatabase。

    12.刪除一個(gè)數(shù)據(jù)庫設(shè)備:sqldropdevice。

    13.取sqlserver的版本信息:sqlgetversionstring。

    在即將發(fā)行的sqlserver7.0中,不再有數(shù)據(jù)庫設(shè)備的概念,創(chuàng)建數(shù)據(jù)庫也將變得更加簡單。在創(chuàng)建特定的用戶數(shù)據(jù)庫時(shí),為了區(qū)分不同的版本進(jìn)行不同的操作,取得sqlserver的版本是非常重要的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚远县| 东兴市| 射阳县| 渝中区| 遂宁市| 巴林左旗| 德令哈市| 东至县| 通海县| 池州市| 公安县| 五指山市| 太仓市| 乌拉特中旗| 团风县| 萝北县| 东莞市| 西华县| 明光市| 邛崃市| 鸡西市| 屯昌县| 丰宁| 沭阳县| 屏南县| 顺平县| 石台县| 南皮县| 水富县| 江孜县| 安岳县| 宁南县| 景东| 家居| 武山县| 新宁县| 沙河市| 永修县| 天台县| 内乡县| 株洲县|