日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]用VB如何實(shí)現(xiàn)文件數(shù)據(jù)對(duì)SQL Server上傳下載

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

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

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

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

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

  1、利用Adodc控件連接

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

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

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

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

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ù)庫(kù) 

  2、利用NetServerEnum函數(shù)

  該函數(shù)是一個(gè)API函數(shù),通過(guò)它可獲得一個(gè)安裝了SQL Server數(shù)據(jù)庫(kù)管理系統(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ù)器名通過(guò)Combo1控件顯示,可從中選擇儲(chǔ)存檔案數(shù)據(jù)的服務(wù)器名,再通過(guò)下列語(yǔ)句連接到選定服務(wù)器中的數(shù)據(jù)庫(kù):

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ù)庫(kù) 

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

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

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

  通過(guò)以下語(yǔ)句打開(kāi)數(shù)據(jù)表:

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

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

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

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 '返回一個(gè) Integer,代表下一個(gè)可供Open語(yǔ)句使用的文件號(hào)
Open filePath For Binary Access Read As file_num '打開(kāi)磁盤(pán)文件
filelen = LOF(file_num) '求文件長(zhǎng)度
ReDim DataArr(filelen) '根據(jù)文件長(zhǎng)度定義動(dòng)態(tài)數(shù)組大小
Get sourcefile, , DataArr '將一個(gè)已打開(kāi)的磁盤(pán)文件讀入數(shù)組變量之中
adofld.AppendChunk DataArr() '將數(shù)組內(nèi)容存入image型字段中
Close file_num '關(guān)閉磁盤(pán)文件
adorst.update 

  其中的filename為表office中的一個(gè)string型字段,用于存儲(chǔ)檔案文件的名稱(chēng)。

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

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

  1、WebBrowser控件

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

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

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

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

  在程序中可利用DataList控件列出數(shù)據(jù)庫(kù)中保存的文件的名稱(chēng),下載的思路為:首先定位要下載的文件所在的記錄;然后將文件的內(nèi)容賦給一個(gè)數(shù)組,并寫(xiě)入一個(gè)二進(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ù)寫(xiě)入動(dòng)態(tài)數(shù)組中
bufferfile = FreeFile
Open "tempfile" For Binary Access Read Write As bufferfile '打開(kāi)一個(gè)臨時(shí)文件
Put bufferfile, ,F(xiàn)ileArr '將動(dòng)態(tài)數(shù)組FileArr中的數(shù)據(jù)寫(xiě)入臨時(shí)文件tempfile中
current = CurDir & "tempfile" '獲取臨時(shí)文件的全路徑
WebBrowOff.Navigate current '在WebBrowser控件中顯示文件內(nèi)容 

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

  結(jié)束語(yǔ)

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

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

美國(guó)紐約州阿蒙克2022年10月20日 /美通社/ -- IBM(NYSE: IBM)發(fā)布 2022 年第三季度業(yè)績(jī)報(bào)告。 IBM 董事長(zhǎng)兼首席執(zhí)行官 Arvind Kri...

關(guān)鍵字: IBM 軟件 BSP 云平臺(tái)

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險(xiǎn)積極籌備個(gè)人養(yǎng)老金的產(chǎn)品設(shè)計(jì)和系統(tǒng)開(kāi)發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產(chǎn)品,推動(dòng)商業(yè)養(yǎng)老保險(xiǎn)、個(gè)人養(yǎng)老金、專(zhuān)屬商業(yè)養(yǎng)老保險(xiǎn)等產(chǎn)品供給。 搭養(yǎng)老政策東風(fēng) ...

關(guān)鍵字: 溫度 BSP 東風(fēng) 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎(chǔ)單元,承載著生存與活動(dòng)的最基本功能。而對(duì)于理想空間的解構(gòu)意義卻在物理性容器之外,體現(xiàn)出人們對(duì)于空間和生活深層關(guān)系的思考,同時(shí)也塑造著人與空間的新型連接...

關(guān)鍵字: 溫度 BSP 智能化 進(jìn)程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績(jī)預(yù)告。今年前三季度,公司預(yù)計(jì)實(shí)現(xiàn)營(yíng)業(yè)收入7.54億元至8.33億元,同比增長(zhǎng)60.24%至77.03%;歸母凈利潤(rùn)預(yù)計(jì)為1.73億...

關(guān)鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟(jì)和信息化局發(fā)布2022年度第一批北京市市級(jí)企業(yè)技術(shù)中心創(chuàng)建名單的通知,諾誠(chéng)健華正式獲得"北京市企業(yè)技術(shù)中心"認(rèn)定。 北京市企業(yè)技...

關(guān)鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國(guó)際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國(guó)軟件定義存儲(chǔ)及超融合市場(chǎng)研究報(bào)告》,報(bào)告顯示:2022年上半年浪潮超融合銷(xiāo)售額同比增長(zhǎng)59.4%,近5倍于...

關(guān)鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團(tuán)成立60周年的紀(jì)念日。趁著首都銀行集團(tuán)成立60周年與首都銀行(中國(guó))在華深耕經(jīng)營(yíng)12年的“大日子”,圍繞作為外資金融機(jī)構(gòu)對(duì)在華戰(zhàn)略的構(gòu)想和業(yè)...

關(guān)鍵字: 數(shù)字化 BSP 供應(yīng)鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會(huì)社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團(tuán)公司上海通運(yùn)國(guó)際物流有限公司(Nipp...

關(guān)鍵字: 溫控 精密儀器 半導(dǎo)體制造 BSP

廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國(guó)進(jìn)出口商品交易會(huì)("廣交會(huì)")于"云端"開(kāi)幕。本屆廣交會(huì)上高新技術(shù)企業(yè)云集,展出的智能產(chǎn)品超過(guò)140,...

關(guān)鍵字: 中國(guó)智造 BSP 手機(jī) CAN

要問(wèn)機(jī)器人公司哪家強(qiáng),波士頓動(dòng)力絕對(duì)是其中的佼佼者。近來(lái)年該公司在機(jī)器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開(kāi)發(fā)的機(jī)器人會(huì)后空翻,自主爬樓梯等。這不,波士頓動(dòng)力又發(fā)布了其機(jī)器人組團(tuán)跳男團(tuán)舞的新視頻,表演的機(jī)器人包括...

關(guān)鍵字: 機(jī)器人 BSP 工業(yè)機(jī)器人 現(xiàn)代汽車(chē)

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉