说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

SQL存取图片能正常显示,无法保存到硬盘的问题

编辑:说三道四文库 发布时间:2018-08-20 04:23
HTML文档下载 WORD文档下载 PDF文档下载
我用以下代码将图片保存至SQL数据库中(sp_Insert为存图片的存储过程)

Dim ms As New MemoryStream
Dim buffer() As Byte
Image.Save(ms, Imaging.ImageFormat.Jpeg)
buffer = ms.ToArray
cn = New SqlConnection(ClsData.ConnStr)
cn.Open()
cmd = New SqlCommand("sp_Insert", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@Image", SqlDbType.Image).Value = buffer
RecordID = cmd.ExecuteScalar


然后用以下代码将图片从SQL数据库中读出(ExecuteSql是一个函数,从数据为中返回SQL语句的值)
Dim sql As String
Dim TempDT As New DataTable
sql = "Select [Image] From V_Image where ID=" & ID
TempDT = ExecuteSql(sql)
Dim buffer() As Byte = TempDT.Rows(0)("Image")
Dim ms As New MemoryStream(buffer)
Dim Image As New Bitmap(ms)
Me.PictureBox.Image = Image 

以上代码取出的图片可以在PictureBox中正常显示,但一用下面这两句就会报错

1.保存图片时
Image.Save("c:\Test.jpg", Imaging.ImageFormat.Jpeg)

2.再将图片转换成字节数组时
Image.Save(ms, Imaging.ImageFormat.Jpeg)

一执行以上两句都会报以下这个错:

System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误。
   at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
   at System.Drawing.Image.Save(String filename, ImageFormat format)


请问高手,这是什么原因造成的,怎么解决?
是不是权限问题呀
Save 参数不对吧?
关注此问题
保存图片时,用FileStream,和SreamWriter 试试看.
Imports System.Data.SqlClient
Imports System.IO

 '你可以这样保存图片
    Private Function SavePic() As Boolean
        Try
            Dim picsql As String = "update AA set orderimage=@orderimage where pno=@pno"
            Dim piccmd As New SqlCommand(picsql, Cn)
            With piccmd
                .Parameters.Add(New SqlParameter("@pno", SqlDbType.VarChar, 15)).Value() = Trim(txtOrderID.Text)
                If Me.PicBox.Image Is Nothing Then
                    .Parameters.Add(New SqlParameter("@orderimage", SqlDbType.Image)).Value = System.DBNull.Value
                Else
                    Dim ms As New MemoryStream()
                    PicBox.Image.Save(ms, PicBox.Image.RawFormat.Jpeg)
                    Dim arrImage() As Byte = ms.GetBuffer
                    ms.Close()
                    .Parameters.Add(New SqlParameter("@orderimage", SqlDbType.Image)).Value = arrImage
                End If
            End With
            If State = ConnectionState.Closed = True Then Cn.Open()
            piccmd.ExecuteNonQuery()
            MsgBox("图片操作成功!", MsgBoxStyle.Information)
        Catch E As SqlException
            MessageBox.Show(E.Message, E.Source, MessageBoxButtons.OK, MessageBoxIcon.Information)
            SavePic = False
        End Try
    End Function


 '从数据库中加载图片到图片框
    Private Function ShowPic() As Boolean
        Dim dtpic As New DataTable()
        Dim dapic As SqlDataAdapter
        Try
            dtpic.Clear()
            Me.PicBox.Image = Nothing
            Dim picsql As String = "select orderimage from AA where pno=@bm"
            Dim piccmd As New SqlCommand(picsql, Cn)
            With piccmd
                .Parameters.Add(New SqlParameter("@bm", SqlDbType.VarChar, 15)).Value() = Trim(txtOrderID.Text)
            End With
            If Cn.State = ConnectionState.Closed = True Then Cn.Open()
            dapic = New SqlDataAdapter(piccmd)
            dapic.Fill(dtpic)

            If dtpic.Rows.Count = 0 Then Exit Function
            'If dtpic.Rows(0)("orderimage") Is System.DBNull.Value And dtpic.Rows(0)("orderimage") = 0 Then Exit Function
            '          
            If IIf(IsDBNull(dtpic.Rows(0)("orderimage")), "", dtpic.Rows(0)("orderimage")) Is System.DBNull.Value Then Exit Function
            If IIf(IsDBNull(dtpic.Rows(0)("orderimage")), "0", dtpic.Rows(0)("orderimage")).length < 10 Then Exit Function
            Dim arrPicture() As Byte = CType(dtpic.Rows(0)("orderimage"), Byte())
            Dim ms As New MemoryStream(arrPicture)
            With PicBox
                .Image = Image.FromStream(ms)
            End With

            ShowPic = True
        Catch e As SqlException
            MessageBox.Show(e.Message, e.Source)
            ShowPic = False
        Finally
        End Try
    End Function
关注!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘