Sqlserver2008 保存文件对象到字段中

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, 0, 0, "",   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", SqlDbType.VarBinary, Int(objmコントロールT.b印影画像.Length), ParameterDirection.Input, False, 0, 0, "", DataRowVersion.Current, objmコントロールT.b印影画像)
                objDbHelper.ExcuteNonQuery(strRtnSQL.ToString, prm4)
            Else
                objDbHelper.ExcuteNonQuery(strRtnSQL.ToString)
            End If

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

        Dim fs As FileStream
        fs = New FileStream("E:\duplo\3.xls", FileMode.Open, FileAccess.Read)
        Dim Data(fs.Length) As Byte
        fs.Read(Data, 0, 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, FileAccess.Write, FileShare.None)

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

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

   效率应该会稍低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值