从SQL Server DB保存和调用图像





0/5 (0投票)
DAL 应该像下面这样插入图像。 我使用企业库进行数据访问。 EmployerImage 的数据类型为 SQL Server 中的 image。
DAL 应该像下面这样插入图像。 我使用企业库进行数据访问。 EmployerImage 的数据类型为 SQL Server 表中的 image。
Public Sub Insert()
        Try
            Dim DB As Database = DatabaseFactory.CreateDatabase(CWB_DBCONNECTION_STRING)
            Dim DBC As DbCommand = DB.GetStoredProcCommand(EMPLOYERS_INSERT)
            DB.AddInParameter(DBC, "@EmployerID", DbType.Int64, EmployerID)         
            If EmployerImage Is Nothing Then
                DB.AddInParameter(DBC, "@EmployerImage", DbType.Binary, Nothing)
            Else
                DB.AddInParameter(DBC, "@EmployerImage", DbType.Binary, GetByteArrayFromImage(EmployerImage))
            End If
            DB.ExecuteNonQuery(DBC)
        Catch ex As Exception
            Throw
        End Try
 End Sub
从图像获取字节数组,您需要创建一个如下的函数。
 Public Function GetByteArrayFromImage(ByVal img As Bitmap) As Byte()
        Try
            Dim ms As New System.IO.MemoryStream
            img.Save(ms, Imaging.ImageFormat.Bmp)
            Dim outBytes(CInt(ms.Length - 1)) As Byte
            ms.Seek(0, System.IO.SeekOrigin.Begin)
            ms.Read(outBytes, 0, CInt(ms.Length))
            Return outBytes
        Catch ex As Exception
            Return Nothing
            Throw
        End Try
    End Function
从 SQL Server 调用图像
 Public Sub SelectRow()
        Dim DB As Database = DatabaseFactory.CreateDatabase(CWB_DBCONNECTION_STRING)
        Dim DBC As DbCommand = DB.GetStoredProcCommand(EMPLOYERS_GETBYID)
        Try
            DB.AddInParameter(DBC, "@EmployerID", DbType.Int64, Me.EmployerID)
            Using DR As IDataReader = DB.ExecuteReader(DBC)
                With DR
                    Do While .Read
                                   
                        If Not IsDBNull(.Item("EmployerImage")) Then
                            EmployerImage = GetImageFromByteArray(.Item("EmployerImage"))
                        Else
                            EmployerImage = Nothing
                        End If                    
                    Loop
                End With
                If (Not DR Is Nothing) Then
                    DR.Close()
                End If
            End Using
        Catch ex As Exception
            Throw
        Finally
            DBC.Dispose()
        End Try
    End Sub
从 SQL Server 表中获取已保存的图像
   Public Function GetImageFromByteArray(ByVal bytes As Byte()) As Bitmap
        Try
            Return CType(Bitmap.FromStream(New IO.MemoryStream(bytes)), Bitmap)
        Catch ex As Exception
            Return Nothing
            Throw
        End Try
    End Function

