基于VFP9语言编程的超大文件存入MS-SQL的实现研究
2020-09-02曾红
曾 红
(四川省自贡市第一人民医院,四川 自贡 643000)
在计算机网络应用中,会经常用文件传输协议(File Transfer Protocol,FTP)来传递文件,有时会感到很不方便,于是,本文用MS-SQL数据库来传递,编写应用程序,把各类文件存储到数据库服务器中,需要时再从数据库中还原文件。
实现思路:采用microsoft SQL数据库建立一个表,由字段自动递增(Identity,ID)、文件名称(nvarchar字符类型)和文件内容(text备注类型)字段组成,开发语言采用Visual FoxPro 9。
1 MS-SQL数据库结构
(1)数据库名称为文件管理。(2)IP地址:192.168.0.100。(3)账号:sa。(4)密码:123456。(5)数据库建表命令为CREATE TABLE文件(ID int IDENTITY(1,1)NOT NULL,文件名称nvarchar(100),文件内容text NULL)ON [PRIMARY]TEXTIMAGE_ON[PRIMARY]。
2 把文件存储到SQL中的程序代码
rem 创建SQL数据库链接[1]
con=sqlstringconnect(“driver=SQL Server;Server=192.168.0.100;Uid=sa;pwd=123456;database=文件管理”)rem 找到需要存储的文件
rem 关闭数据链接,完成存储
SQLDISCONNECT(con)
3 从SQL中还原文件的代码
rem 创建SQL数据库链接
con=sqlstringconnect(“driver=SQL Server;Server=192.168.0.100;Uid=sa;pwd=123456;database=文件管理”)
G=SQLEXEC(con,”select * from 文件”,”文件”)
rem 关闭数据链接
SQLDISCONNECT(con)
select 文件
rem 把文件内容进行base64反编码
content=STRCONV(文件内容,14)
filename=ALLTRIM(文件名称)
rem 还原文件
STRTOFILE(filename, content)
4 实际应用中遇到的问题
实际运用中,经常遇到大文件,比如视频、压缩包等,很多文件大小都在10 M以上,有时可能达到几百兆、几千兆以上。运行时,当文件换成base64编码后,数据长度如果超过16 777 184字节,程序就会自动切断超长部分,在还原文件时,长度就变小,还原的文件肯定就是错误的。
5 采用分块存储技术解决超大文件的存储问题
要解决上面的问题,就必须修改程序,通过反复思考,决定把文件分成若干块,再分别存储到数据库中,即分块存储技术,需要还原时,再把这些块组合起来,即完成还原文件。
对上面程序代码进行改进,打开文件后,按照12 000 000字节大小分块,再转换成base64编码不会超过16 777 184字节长,最后,存入数据库中,由于存储时间较长,程序运行时有进度提示,实现代码如下:
6 从SQL中读取分块存储的数据,还原文件的代码
对上面还原程序代码进行改进,从数据库中读取出记录后,把每块内容进行base64反编码,最后,写入指定的还原文件中,由于存储时间较长,程序运行时有进度提示,实现代码如下:
7 结语
当文件尺寸小于12 M时,可以直接存储到数据库中;当文件尺寸大于12 M时,就必须采用分块技术存储到数据库。采用VFP9语言编程,完美实现了超大文件的存储和还原。为了方便程序调用,可以进一步把程序修改成函数。