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

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

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

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

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

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

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

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

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

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

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

@FilePath nvarchar(400)='C:mp.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_OPENFILEEXEC @INT_ERR=SP_OADESTROY @INT_FSO

(T114)

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗