程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何應用T-SQL實現本地文件操作

如何應用T-SQL實現本地文件操作

編輯:關於SqlServer

最近用VC為公司寫一個遠程數據庫監控程序,程序需要在內網長時間運行。

其實很簡單,用戶在WEB頁面提交數據到數據庫,軟件間隔一段時間詢問一次數據庫,如果有新的記錄就做相應的處理。

但是WEB頁面提交的記錄很復雜:記錄主要保存文本文件路徑,但是文本文件可能包含真實數據,也可能包含另外一條數據庫記錄的ID,還可能包含另外一個文件路徑。

總之,最後的結果上得到用戶提交的文件的路徑,然後下載文件,處理文件。

如果把全部的分析操作都放到應用程序來實現,可能需要多次查詢遠程數據庫取記錄,降低速度,增加了程序復雜度。

所以就想能不能在存儲過程中把所有的分析操作搞定,然後返回用#號分割各個文件路徑(path1#path2#path3)的一條記錄集呢!

在網上搜索,查詢MSDN,終於成功了!目前程序已經安全、准確運行了一周。

當然還加入了一些不可忽視的工作:最早的作品生存時間不長,最多運行一天就連接數據庫失敗了,發現是網絡故障造成的。

後來改進程序,當連接遠程數據庫失敗後暫停一段時間後自動重試,直到連接上或重試次數達到一定數量。經過拔網線、停止數據庫等測試,都能在恢復網絡後自動重新連接上。

入正題,以下是核心代碼(為安全起見,做了修改,不便把全部代碼在網上公布):

@FilePath nvarchar(400)='C:\tmp.txt'
Declare @INT_ERR int ----錯誤代碼,0 成功
Declare @INT_FSO int ----FSO對象標志
Declare @INT_OPENFILE int ----文本文件對象標志
Declare @STR_CONTENT varchar(8000) ----文件內容
--創建FSO對象
--甚至可以是我們自己寫的dll控件都可以
EXEC @INT_ERR = sp_OACreate 'Scripting.FileSystemObject', @INT_FSO OUTPUT
-----文件路徑
Declare @STR_FILENAME nvarchar(50)
Set @STR_FILENAME = @FilePath
---FSO.OpenTextFile(FileName, 1, FALSE),第二個參數1表示只讀,第三個參數false表示文件不存在時不創建
----創建文本文件對象
----FSO的所有方法都可以用下面類似方式創建,可以實現文件的任意操作,非常方便
EXEC @INT_ERR=SP_OAMETHOD @INT_FSO,'OpenTextFile',@INT_OPENFILE OUTPUT,@STR_FILENAME,1,FALSE
----讀取文件,內容放到@STR_CONTENT
----讀到了文件內容,後面的處理就好辦了
EXEC @INT_ERR=SP_OAMETHOD @INT_OPENFILE,'ReadAll',@STR_CONTENT OUTPUT
----銷毀創建的對象
EXEC @INT_ERR=SP_OADESTROY @INT_OPENFILE
EXEC @INT_ERR=SP_OADESTROY @INT_FSO

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved