當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]本文以Visual Basic6.0和SQL Server 2000環(huán)境下的數(shù)據(jù)庫為例,介紹文件數(shù)據(jù)對SQL Server 2000數(shù)據(jù)庫的上傳和下載。很多單位尤其是制造業(yè)、設(shè)計院,計算機(jī)應(yīng)用開展的較早。在這些單位,各種法規(guī)文件的下達(dá)以及日常工作

本文以Visual Basic6.0和SQL Server 2000環(huán)境下的數(shù)據(jù)庫為例,介紹文件數(shù)據(jù)對SQL Server 2000數(shù)據(jù)庫的上傳和下載。

很多單位尤其是制造業(yè)、設(shè)計院,計算機(jī)應(yīng)用開展的較早。在這些單位,各種法規(guī)文件的下達(dá)以及日常工作中產(chǎn)生的大量數(shù)據(jù),形成了種類繁雜、數(shù)量龐大檔案資料(各種文件)。面對海量數(shù)據(jù),原有檔案管理系統(tǒng)在進(jìn)行數(shù)據(jù)的備份、還原、更新與維護(hù)時多數(shù)已力不從心。傳統(tǒng)的基于文件的管理方式,還給各種檔案的保密工作帶來了隱患。為此,越來越多的單位開始開發(fā)基于數(shù)據(jù)庫的文件檔案管理系統(tǒng),以期克服這些毛病。 
 

數(shù)據(jù)庫的連接

  對數(shù)據(jù)庫的操作一定在已經(jīng)與本地抑或是網(wǎng)絡(luò)數(shù)據(jù)庫建立了聯(lián)系的基礎(chǔ)上,建立連接這一需求可以通過兩種方式實現(xiàn)。

  為便于理解,這里假定服務(wù)器名為Data_Server,檔案數(shù)據(jù)庫名為Science_File,其中的一個數(shù)據(jù)表名為office,設(shè)計有一個名稱為office、類型為Image的字段,用于保存文件。為便于將不同大小的文件存儲在SQL Server的數(shù)據(jù)表中,必須在數(shù)據(jù)表中創(chuàng)建一個Image型的字段,該字段可存儲的最大文件達(dá)2GB字節(jié)。

  1、利用Adodc控件連接

  Visual Basic提供了一個Adodc控件。它通過Adodc屬性的設(shè)置,按照向?qū)崾就瓿蓴?shù)據(jù)庫的連接。具體過程如下:

  首先在屬性頁中選擇生成按鈕,進(jìn)入數(shù)據(jù)鏈接屬性對話框;然后選擇該對話框中的連接屬性頁,選擇或輸入服務(wù)器名稱和數(shù)據(jù)庫等重要信息;最后測試連接,連接成功后,按確定按鈕,返回到屬性頁對話框,可獲得連接字符串,如下例:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist;Security Info=False;Initial Catalog=Science_File;Data Source=Data_Server 

  通過下列語句,即可連接到指定的數(shù)據(jù)庫:

dim odbcstr as String, adocon As New ADODB.Connection
odbcstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;_
Initial Catalog=Science_File;Data Source=Data_Server"
adocon.Open odbcstr '連接到數(shù)據(jù)庫 

  2、利用NetServerEnum函數(shù)

  該函數(shù)是一個API函數(shù),通過它可獲得一個安裝了SQL Server數(shù)據(jù)庫管理系統(tǒng)的服務(wù)器列表。方法如下: 

Private Declare Function NetServerEnum Lib "netapi32" _
(lpServer As Any, ByVal lLevel As Long, vBuffer As Any, _
lPreferedMaxLen As Long, lEntriesRead As Long, lTotalEntries As Long, _
ByVal lServerType As Long, ByVal sDomain$, vResume As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination _
As Any, Source As Any, ByVal Length As Long)
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long

Private Type SV_100
 platform As Long
 name As Long
End Type

dim sv100 As SV_100, nRet As Long, i as long, lServerInfo As Long
dim lServerInfo As Long, lPreferedMaxLen As Long, lEntriesRead As Long
dim lTotalEntries As Long, sDomain As String, vResume As Variant
dim buffer() As Byte, nLen As Long
lPreferedMaxLen = 65536
nRet = NetServerEnum(0, 101, lServerInfo, lPreferedMaxLen, lEntriesRead, lTotalEntries, 4, sDomain, vResume)
If nRet = 0 or nRet = 234& Then
 For i = 0 To lEntriesRead - 1
  CopyMemory sv100, ByVal lServerInfo, Len(sv100)
  nLen = lstrlenW(sv100.name) * 2 
  If nLen Then
   ReDim buffer(0 To (nLen - 1)) As Byte
   CopyMemory buffer(0), ByVal sv100.name, nLen
  End If
  Combo1.List(i) = buffer '服務(wù)器名
  lServerInfo = lServerInfo + 24
 Next i
End If 

  得到的服務(wù)器名通過Combo1控件顯示,可從中選擇儲存檔案數(shù)據(jù)的服務(wù)器名,再通過下列語句連接到選定服務(wù)器中的數(shù)據(jù)庫:

odbcstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;_
Initial Catalog=Science_File;Data Source=" & Form2.Combo1.Text
adocon.Open odbcstr '連接到數(shù)據(jù)庫 

  其中的變量含義與前述相同,F(xiàn)orm2.Combol.Text的內(nèi)容即為選定的服務(wù)器名。

  通過以上兩種方法皆可達(dá)到連接目的,前者簡潔但有很大局限性,當(dāng)數(shù)據(jù)服務(wù)器名稱發(fā)生變化時,必須修改源代碼,很不方便。后者既有較強(qiáng)的操作性又很直觀。在筆者開發(fā)的科技檔案管理系統(tǒng)采用了第二種方法。
數(shù)據(jù)的上傳

  數(shù)據(jù)的上傳就是將檔案文件存儲到數(shù)據(jù)表中。在數(shù)據(jù)上傳時,因情況不同一般有兩種方式,即單一上傳和批量上傳,前者指一次上傳一個文件(在數(shù)據(jù)表中增加一條記錄),后者指一次將一個文件夾中的所有文件上傳到數(shù)據(jù)庫。兩者在實質(zhì)上是統(tǒng)一的,批量上傳時,只需用一個循環(huán)語句就可。以下介紹單一上傳的過程。1、打開數(shù)據(jù)表

  通過以下語句打開數(shù)據(jù)表:

dim office_rst As New ADODB.Recordset
adocon.CursorLocation = adUseClient 
office_rst.Open "office", adocon, adOpenDynamic, adLockOptimistic, adCmdTable [!--empirenews.page--]

  2、添加新記錄并上傳文件

  假定通過一些操作已經(jīng)獲得了要上傳的文件路徑和名稱(例如,可利用CommomDialog控件獲得),保存在string型變量filePath中。上傳的關(guān)鍵語句如下:

dim adofld As ADODB.Field, DataArr() As Byte, filelen As Long, file_num As Long
office_rst.AddNew
Set adofld = office_rst("office")
adorst("filename").Value = filePath
file_num = FreeFile '返回一個 Integer,代表下一個可供Open語句使用的文件號
Open filePath For Binary Access Read As file_num '打開磁盤文件
filelen = LOF(file_num) '求文件長度
ReDim DataArr(filelen) '根據(jù)文件長度定義動態(tài)數(shù)組大小
Get sourcefile, , DataArr '將一個已打開的磁盤文件讀入數(shù)組變量之中
adofld.AppendChunk DataArr() '將數(shù)組內(nèi)容存入image型字段中
Close file_num '關(guān)閉磁盤文件
adorst.update 

  其中的filename為表office中的一個string型字段,用于存儲檔案文件的名稱。

  數(shù)據(jù)的下載

  在完成數(shù)據(jù)庫連接后不僅可以對數(shù)據(jù)庫進(jìn)行文件上傳的操作,還可以很方便的進(jìn)行下載(瀏覽)。通過Web Browser控件可瀏覽各種類型的文件。

  1、WebBrowser控件

  WebBrowser控件使應(yīng)用程序增加了瀏覽功能,利用它可瀏覽常見的一些文件格式,如Office、CAD、BMP、JEG等。包含了WebBrowser控件的應(yīng)用程序不僅可以對本機(jī)上的文件,還可以對局域網(wǎng)甚至世界網(wǎng)絡(luò)范圍內(nèi)的文件進(jìn)行瀏覽。

  WebBrowse控件有很多方法,但這里只用到了"Navigate"方法,Navigate方法就是通過一個文件的全路徑去訪問這個文件,具體用法為:
WebBrowOff.Navigate URL

  其中WebBrowOff 是一個WebBrowser控件,URL是必需的string型參數(shù),它可以是表示在Internet的WWW服務(wù)程序上用于指定信息位置的字符串,也可以是一個全路徑或者是對要瀏覽的文件通過通用命名標(biāo)準(zhǔn)命名的位置和名稱。

  2、文件數(shù)據(jù)的下載

  在程序中可利用DataList控件列出數(shù)據(jù)庫中保存的文件的名稱,下載的思路為:首先定位要下載的文件所在的記錄;然后將文件的內(nèi)容賦給一個數(shù)組,并寫入一個二進(jìn)制文件;最后將該文件路徑、文件名傳給WebBrowser控件。

  關(guān)鍵代碼如下所示:

dim FileArr () As Byte, current as string
filelen = office_rst.Fields("office").ActualSize '得到office字段中的文件數(shù)據(jù)的大小
ReDim FileArr(filelen)
FileArr() = office_rst.Fields("office").GetChunk(filelen) '將字段中數(shù)據(jù)寫入動態(tài)數(shù)組中
bufferfile = FreeFile
Open "tempfile" For Binary Access Read Write As bufferfile '打開一個臨時文件
Put bufferfile, ,F(xiàn)ileArr '將動態(tài)數(shù)組FileArr中的數(shù)據(jù)寫入臨時文件tempfile中
current = CurDir & "tempfile" '獲取臨時文件的全路徑
WebBrowOff.Navigate current '在WebBrowser控件中顯示文件內(nèi)容 

  以上代碼中未定義的變量與前述相同。

  結(jié)束語

  現(xiàn)在很多單位檔案資料數(shù)據(jù)類型繁多,有OFFICE文檔、純文本、圖片資料以及包含基礎(chǔ)地形圖、現(xiàn)狀專題圖、規(guī)劃設(shè)計成果圖等多種圖件的AUTOCAD文件,并且數(shù)據(jù)量巨大,文件數(shù)目極多,利用本文介紹的方法可以方便的對數(shù)據(jù)庫各種數(shù)據(jù)進(jìn)行查看、上傳、下載操作,方便了有大量檔案資料的單位對資料的管理. 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉