人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

用ADO管理SQL Server數(shù)據(jù)庫(kù)及其設(shè)備

用ADO管理SQL Server數(shù)據(jù)庫(kù)及其設(shè)備

更新時(shí)間:2022-09-11 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

微軟公司的SQLServer是目前小型網(wǎng)絡(luò)中常用的數(shù)據(jù)庫(kù)管理系統(tǒng)之一。面向這種網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的應(yīng)用程序也在日益增多,這種網(wǎng)絡(luò)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的正常運(yùn)行,一般都依賴于已經(jīng)存在的用戶數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)的工作當(dāng)然可以用SQL Server提供的SQL EnterpriseManager工具來(lái)完成,但是,如果能夠提供一種定制的數(shù)據(jù)庫(kù)管理工具,專門管理應(yīng)用系統(tǒng)需要的數(shù)據(jù)庫(kù)及其設(shè)備,對(duì)用戶來(lái)說(shuō)無(wú)疑更加理想。

  現(xiàn)存問(wèn)題

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

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

DISKINITNAME=‘logical_name',PHYSNAME=‘physical_name',VDEVNO=virtual_device_number,SIZE=number_of_2K_blocks[,VSTART=virtual_address]

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

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

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

  解決方案

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

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

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

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

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

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

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

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

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

CREATEDATABASEdatabase_name[ON{DEFAULT|database_device}[=size][,database_device[=size]]...]
      [LOGONdatabase_device[=size][,database_device[=size]]...][FORLOAD]

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

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

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

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

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

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

PublicFunctionSQLGetCurrentDatabaseName(CnAsADODB.Connection)AsStringDimsSQLAsStringDimRSAsNewADODB.Recordset
OnErrorGoToerrSQLGetCurrentDatabaseNamesSQL=“selectCurrentDB=DB_NAME()"RS.OpensSQL,
CnSQLGetCurrentDatabaseName=Trim$(RS!CurrentDB)RS.CloseExitFunctionerrSQLGetCurrentDatabaseName:SQLGetCurrentDatabaseName=“"EndFunction

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

PublicFunctionSQLExistDeviceName(CnAsADODB.Connection,sDevNameAsString)AsBoolean

'--按照名稱判斷一個(gè)設(shè)備是否存在,如果存在,返回1,否則返回0

DimsSQLAsStringDimRSAsNewADODB.RecordsetDimbTmpAsBooleanOnErrorGoToerrSQLExistDeviceNamesSQL=“
selectCntDev=count(*)frommaster.dbo.sysdeviceswherename=‘“&sDevName&”'"RS.OpensSQL,CnIfRS!CntDev=0ThenbTmp=FalseElsebTmp=
TrueRS.CloseSQLExistDeviceName=bTmpExitFunctionerrSQLExistDeviceName:
SQLExistDeviceName=FalseEndFunction

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

  編者注:函數(shù)源代碼發(fā)表在本報(bào)的WWW站點(diǎn)上,地址是:http://www.computerworld.com.cn/98/skill/default.htm。下同。歡迎訪問(wèn)!

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

  5.取得SQLServer安裝目錄下的DATA子目錄路徑:SQLGetDataPath。

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

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

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

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

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

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

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

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

  13.取SQLServer的版本信息:SQLGetVersionString。

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

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 黄龙县| 花垣县| 永州市| 定陶县| 广州市| 怀仁县| 深州市| 雅江县| 北辰区| 福鼎市| 封丘县| 重庆市| 福泉市| 公主岭市| 休宁县| 新干县| 隆尧县| 昆山市| 平顺县| 岚皋县| 武宁县| 荃湾区| 文山县| 万源市| 上高县| 永善县| 东源县| 姜堰市| 阿克苏市| 万山特区| 兴山县| 丰宁| 宝鸡市| 凤阳县| 射阳县| 西乌珠穆沁旗| 周口市| 西畴县| 广州市| 鸡西市| 定远县|