如何将DevExpress图片框中的图片存入SQL Server数据库
将DevExpress图片框中的图片保存到SQL Server数据库的步骤
首先得明确:你找到的ByteToImage函数是从数据库读取二进制数据后转成Bitmap用于显示的,而你现在要做的是把图片转成二进制存进数据库,需要的是反向的转换逻辑,下面把你的疑问和完整流程讲清楚:
1. ByteToImage的参数说明
这个函数要求传入的是Byte类型数组(Byte()),也就是图片文件的二进制字节流——比如你从SQL Server的varbinary(max)字段读出来的就是这种数组,传入后就能转成Bitmap显示在图片框里。但这一步是读取数据时用的,不是保存时用的。
2. 把图片转成二进制数组(保存到数据库的关键)
你已经拿到了图片路径filename,可以直接用下面的代码把图片转成Byte数组:
' 从文件路径读取图片的二进制数据 Dim imageBytes() As Byte = System.IO.File.ReadAllBytes(filename)
如果不想用路径,直接从DevExpress的PictureEdit控件取当前显示的图片:
' 从PictureEdit控件获取Image对象,转成二进制数组 Using ms As New System.IO.MemoryStream() userPicture.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) ' 可根据需求选Jpeg/Png等格式 Dim imageBytes() As Byte = ms.ToArray() End Using
3. 将二进制数组存入SQL Server
用参数化查询把数据存进去,避免SQL注入,示例代码:
Dim connString As String = "你的SQL Server连接字符串" Using conn As New SqlClient.SqlConnection(connString) conn.Open() Dim sql As String = "INSERT INTO 目标表名 (图片字段名) VALUES (@ImageData)" Using cmd As New SqlClient.SqlCommand(sql, conn) ' 添加参数,指定类型为VarBinary cmd.Parameters.Add("@ImageData", SqlDbType.VarBinary, -1).Value = imageBytes cmd.ExecuteNonQuery() End Using End Using
4. 后续从数据库读取显示时用到ByteToImage
如果之后要把数据库里的图片读出来显示在PictureEdit里,就用你这个函数:
' 从数据库读取二进制数组(示例) Dim imageBytes() As Byte = DirectCast(reader("图片字段名"), Byte()) ' 调用ByteToImage转成Bitmap Dim img As Bitmap = ByteToImage(imageBytes) ' 赋值给PictureEdit userPicture.Image = img
另外,你的ByteToImage函数可以优化下,用Using自动释放MemoryStream:
Public Function ByteToImage(ByVal blob() As Byte) As Bitmap Using mStream As New MemoryStream(blob) Return New Bitmap(mStream, False) End Using End Function
内容的提问来源于stack exchange,提问作者Clamont
相关产品推荐
相关产品推荐

