加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver2008 保存文件对象到字段中

发布时间:2020-12-12 14:52:22 所属栏目:MsSql教程 来源:网络整理
导读:1. 可能存储任意格式的文件 *.xls,*.doc,*.pdf,图片等 2. 字段需要定义成: Image类型。需要另外一个字段保存扩展名,以变还原。 3.DB模型为: ??? Private arr印影画像() As Byte??????????????????????? '印影画像 ??? Public Property b印影画像() As By

1. 可能存储任意格式的文件 *.xls,*.doc,*.pdf,图片等

2. 字段需要定义成: Image类型。需要另外一个字段保存扩展名,以变还原。

3.DB模型为:

??? Private arr印影画像() As Byte??????????????????????? '印影画像

??? Public Property b印影画像() As Byte()
??????? Get
??????????? Return arr印影画像
??????? End Get
??????? Set(ByVal Value As Byte())
??????????? arr印影画像 = Value
??????? End Set
??? End Property

??? Public Property 印影画像更新() As Boolean
??????? Get
??????????? Return bln印影画像更新
??????? End Get
??????? Set(ByVal value As Boolean)
??????????? bln印影画像更新 = value
??????? End Set
??? End Property

?

???????????? 新规SQL:

??????? If objmコントロールT.印影画像更新 = False Then? '印影画像
??????????? strSql.Append(",印影画像" & vbCrLf)
??????? End If

??????????? '新規を実行する
??????????? If objmコントロールT.印影画像更新 = False Then
??????????????? Dim prm4 As New SqlParameter("@Picture",SqlDbType.VarBinary,Int(objmコントロールT.b印影画像.Length),ParameterDirection.Input,False,"",?? DataRowVersion.Current,objmコントロールT.b印影画像)
??????????????? objDbHelper.ExcuteNonQuery(strRtnSQL.ToString,prm4)
??????????? Else
??????????????? objDbHelper.ExcuteNonQuery(strRtnSQL.ToString)
??????????? End If

?

?????? 数据库对象类用代参数的方法:??????????? Me.PrepareCommand(strCommandText,parm)

????? 更新SQL

??????? '印影画像
??????? If objmコントロールT.印影画像更新 = False Then
??????????? strSql.Append(",印影画像 = @Picture " & vbCrLf)
??????? End If

??????????? '更新を実行する
??????????? If objmコントロールT.印影画像更新 = False Then
??????????????? Dim prm4 As New SqlParameter("@Picture",DataRowVersion.Current,prm4)
??????????? Else
??????????????? objDbHelper.ExcuteNonQuery(strRtnSQL.ToString)
??????????? End If

???????? 从画面或文件将对象存入DB模型

??????? Dim fs As FileStream
??????? fs = New FileStream("E:duplo3.xls",FileMode.Open,FileAccess.Read)
??????? Dim Data(fs.Length) As Byte
??????? fs.Read(Data,Int(fs.Length))
??????? objmコントロールT.b印影画像 = Data

?

??????????? 从数据库取得后转为byte()

??????????????? If PFn_NullToString(dtRtnSearch.Rows(0).Item("印影画像")) <> "" Then
??????????????????? objmコントロールT.b印影画像 = CType(dtRtnSearch.Rows(0).Item("印影画像"),Byte())
??????????????? End If

????????????? 保存为文件或画面显示

??????????? 'Pic印影画像?画面显示

??????????? If Not mObjMコントロールT.b印影画像 Is Nothing Then
??????????????? ms = New MemoryStream(mObjMコントロールT.b印影画像)

????????????????me.pic印影画像.Image = Image.FromStream(ms)

????????????End If

????????????或保存为文件

?????????????方案1:FileStream处理

??????????????? Dim Fs As FileStream = New FileStream("e:bbb.xls",_
???? FileMode.OpenOrCreate,FileAccess.Write,FileShare.None)
??????????????? 'Fs.Write(mObjMコントロールT.b印影画像)

??????????????? For i As Integer = 0 To mObjMコントロールT.b印影画像.Count - 1
??????????????????? Fs.WriteByte(mObjMコントロールT.b印影画像(i))
??????????????? Next
??????????????? Fs.Flush()
??????????????? Fs.Close()

??????????????? 'CreateTextFile("E:aaa.xls")


?????????????? 方案2:MemoryStream+FileStream处理

????????????? ms = New MemoryStream(mObjMコントロールT.b印影画像)

??????? Dim Fs As FileStream = New FileStream("e:bbb.xls",_
?????????FileMode.OpenOrCreate,FileShare.None)

???????? ms.WriteTo(Fs)
??????? ms.Close()
??????? Fs.Close()

4. 结论存什么文件都可以,连excel的格式都没有问题。存入各取出都是byte的形式。

?? 效率应该会稍低。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读