从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