多文件类型与本地缓存

如果要在二进制列要插入任意类型的文件,那么我们必须增加一列,用于存储所插入文件的后缀名。
同样为了提高运行效率,可以在插入文件的时候,同时在数据库中存储所插入文件的crc校验值;从数据库中提取文件之前,先判断本地是否存在此文件,如果存在,则将本地文件的crc校验值和数据库中的存储的crc校验值进行比较,如果相等,则直接使用本地文件,否则从数据库中提取文件。
后缀名和crc校验值可以存储在同一个列中。

设计过程:

1、数据库库中有两列,分别是附件列和信息列,附件列是二进制列,用于存储文件本身,信息列是字符列,用于存储文件的后缀名和crc校验值。

2、增加外部表的时候,将附件类和信息列排除,不要加载到Foxtable中。

3、插入文件的参考代码:

If Tables("员工").Current Is Nothing Then
   
Return

End
If
Dim
dr As DataRow = Tables("员工").Current.DataRow
If
dr.RowState = DataRowState.Added Then '如果是新增行,必须先保存才能插入文件
    dr.Save()

End
If
Dim
dlg As New OpenFileDialog
dlg
.Filter = "图形文件|*.bmp;*.jpg;*.gif;*.png"
If
dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim ex As String = fl.SubString(fl.LastIndexOf(".") + 1) '获取文件后缀名
    ex = ex & "|" & CRCCheckFile(fl) '将后缀名和文件的crc校验值组合成一个字符串
    dr.SQLInsertFile("附件",fl) '插入文件
    dr.SQLSetValue("信息",ex)
'将文件的后缀名和crc校验值保存在信息列

End
If

4、打开文件的参考代码:

If Tables("员工").Current Is Nothing Then
   
Return

End
If
Dim
dr As DataRow = Tables("员工").Current.DataRow
Dim pts() As String = dr.SQLGetValue("信息").Split("|")
Dim fl As String ProjectPath &  dr("_Identify") & "." & pts(0)
If FileSys.FileExists(fl) AndAlso CRCCheckFile(fl) = pts(1) Then
'
如果本地存在同名文件且CRC校验值相同
    '则直接使用本地文件
Else '否则从数据库提取文件
    If dr.SQLLoadFile("附件",fl) = False Then '如果提取文件失败
        Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Return
    End If
End
If
Dim
Proc As New Process
'
打开文件
Proc.File = fl
Proc
.Start()


本页地址:http://www.foxtable.com/webhelp/topics/2957.htm