VB中实现数据库图片存储的方法解析 (vb中如何向数据库中存储图片)

在使用VB进行开发的时候,经常会涉及到图片的存储和展示。而如果需要将图片存储到数据库中,可能会比较困难,因为图片的数据较大,需要转换成二进制再进行存储。本文将为大家介绍如何使用VB实现数据库图片存储的方法。

1. 图片格式转换

在将图片存储到数据库中之前,我们需要将它转换成二进制格式。在VB中,我们可以使用FileSystemObject对象读取图片文件,再使用ADODB.Stream对象将它转换成二进制格式。具体代码如下:

“`

Dim fs As New FileSystemObject

Dim stream As New ADODB.Stream

stream.Type = adTypeBinary

stream.Open

stream.LoadFromFile “C:\image.png”

Dim byteStream() As Byte

byteStream = stream.Read()

“`

这段代码首先创建一个FileSystemObject对象,用于读取文件。接着,创建一个ADODB.Stream对象,指定它的类型为adTypeBinary,打开并从文件中读取图片。将转换后的二进制数据存储在byteStream数组中。

2. 数据库表的设计

在将图片存储到数据库中之前,我们需要设计一个表用于存储它。一般来说,这个表需要包含以下几个字段:

– Id:图片的ID,类型为整数,用于唯一标识一张图片。

– Name:图片的名称,类型为字符串,用于描述图片的内容或者作用。

– Type:图片的类型,类型为字符串,用于记录图片的格式,例如jpeg、png等。

– Data:图片的数据,类型为二进制,用于存储图片的内容。

具体的SQL语句如下:

“`

CREATE TABLE Images (

Id INTEGER PRIMARY KEY,

Name TEXT,

Type TEXT,

Data BLOB

);

“`

在这个表中,我们将使用数据类型为BLOB的字段来存储图片的二进制数据。

3. 将图片存储到数据库中

当我们有了转换后的二进制数据和数据库表之后,就可以将图片存储到数据库中了。在VB中,我们可以使用ADODB.Connection对象连接数据库,再使用ADODB.Command对象执行SQL语句,将二进制数据存储到表中。具体代码如下:

“`

Dim conn As New ADODB.Connection

Dim cmd As New ADODB.Command

conn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.mdb;”

conn.Open

cmd.ActiveConnection = conn

cmd.CommandText = “INSERT INTO Images (Name, Type, Data) VALUES (?, ?, ?);”

cmd.Parameters.Append cmd.CreateParameter(“Name”, adVarChar, adParamInput, Len(imageName), imageName)

cmd.Parameters.Append cmd.CreateParameter(“Type”, adVarChar, adParamInput, Len(imageType), imageType)

cmd.Parameters.Append cmd.CreateParameter(“Data”, adBinary, adParamInput, UBound(byteStream) – LBound(byteStream) + 1, byteStream)

cmd.Execute

conn.Close

“`

这段代码首先创建一个ADODB.Connection对象,用于连接数据库。接着,创建一个ADODB.Command对象,指定它的ActiveConnection为conn,CommandText为INSERT INTO Images (Name, Type, Data) VALUES (?, ?, ?);,使用CreateParameter方法创建三个参数,分别对应Name、Type和Data字段。用Execute方法将数据存储到表中,再关闭连接。

4. 从数据库中获取图片

在将图片存储到数据库中之后,我们还需要从数据库中获取它并进行展示。在VB中,我们可以使用ADODB.Recordset对象从表中读取数据,再使用PictureBox控件展示它。具体代码如下:

“`

Dim rs As New ADODB.Recordset

rs.Open “SELECT * FROM Images WHERE Id = ” & imageId, conn, adOpenStatic, adLockOptimistic

If Not rs.EOF Then

Dim stream As New ADODB.Stream

stream.Type = adTypeBinary

stream.Open

stream.Write rs.Fields(“Data”).Value

stream.SaveToFile “C:\image.png”, adSaveCreateOverWrite

PictureBox1.Picture = LoadPicture(“C:\image.png”)

End If

rs.Close

“`

这段代码首先创建一个ADODB.Recordset对象,使用Open方法执行SQL语句(SELECT * FROM Images WHERE Id = ‘imageId’),读取图片数据。如果读取到了数据,就创建一个ADODB.Stream对象,写入Data字段的值,再将它保存到本地文件。使用LoadPicture方法将图片加载到PictureBox控件中展示。

由此可见,使用VB实现数据库图片存储并不困难,只需要掌握相关的技术和方法即可。希望本文对您有所帮助。

相关问题拓展阅读:

VB如何将一张网图上的图片写入数据库

dim aduSave as New ADODB.Recordset

aduSave.Open ” select Picture from tblBUltrasonicCheckPic where PersonID='” & txtInfo(0) & “‘ and ExamineID='” & strExamID & “‘ and PictureID=” & I, conn, adOpenDynamic, adLockBatchOptimistic

DoEvents

saveCPic(aduSave.Fields(“Picture”))

aduSave.UpdateBatch

Public Sub SavePic(adrPic As ADODB.field)

‘–保存图像

On Error Resume Next

‘On Error GoTo err

Dim bytes() As Byte

Dim file_name As String

Dim file_num As Integer

Dim file_length As Long

Dim num_blocks As Long

Dim left_over As Long

Dim block_num As Long

file_num = FreeFile

Open “c:\photo_pic.jpg” For Binary Access Read As #file_num

file_length = LOF(file_num)

If file_length > 0 Then

num_blocks = file_length / BLOCK_SIZE

left_over = file_length Mod BLOCK_SIZE

ReDim bytes(BLOCK_SIZE)

For block_num = 1 To num_blocks

Get #file_num, , bytes()

adrPic.AppendChunk bytes()

Next block_num

If left_over > 0 Then

ReDim bytes(left_over)

Get #file_num, , bytes()

adrPic.AppendChunk bytes()

End If

Close #file_num

End If

DoEvents: DoEvents: DoEvents

On Error Resume Next

Kill “c:\photo_pic.jpg”

DoEvents

Exit Sub

err:

Debug.Print err.Description

End Sub

Public Sub showPic(ByVal Pic As ADODB.field)

‘–显示图像用

On Error Resume Next

Dim bytes() As Byte

Dim file_name As String

Dim file_num As Integer

Dim file_length As Long

Dim num_blocks As Long

Dim left_over As Long

Dim block_num As Long

Dim hgt As Single

DoEvents

file_num = FreeFile

Kill “c:\photo_pic.jpg”

DoEvents

Open “c:\photo_pic.jpg” For Binary As #file_num

file_length = Pic.ActualSize

num_blocks = file_length / BLOCK_SIZE

left_over = file_length Mod BLOCK_SIZE

For block_num = 1 To num_blocks

bytes() = Pic.GetChunk(BLOCK_SIZE)

Put #file_num, , bytes()

Next block_num

If left_over > 0 Then

bytes() = Pic.GetChunk(left_over)

Put #file_num, , bytes()

End If

Close #file_num

End Sub

用LoadPicture直接读取某资料架图片,并显示在Image控件就可以了。

若直接将图片存入资料库将导致数据存取缓慢和增加资料库容量。

比如:

Image1.Picture = LoadPicture(“e:\653\” & adotype.Recordset.Fields(“No”).value & “.jpg”)

*储存图片名字在资料库的栏位中就可以了。

建议只存储图片的路径,而且存储相对路径的话,在局域网内也可以正常访问,但要注意的是“不同操作系统的路径表示方式不同”

但如果要把图片存到数据库中,好像只能用流来控制,存入还好,取出时有时会取不出来

可以的..读取文件成为二进制格式..然后写入ACCESS..字段类型必须是二进制的兼容格式~

不过一般不这样做..不能提高速度..也增加服务器的负担

VB如何拍照后自动将图片保存到数据库

(1)你需要把Command1_Click里面的代码单独提出来写成一个过程(或者函数),类似于这样的形式:

Private Sub SavePicToDB(ByVal PicFilename as String)

‘这里面是你的代码,直接复制进来

‘需要稍做修改,把”C:\aa.JPG” 改为 PicFileName

End Sub

(2)然后在cmdStartPhoto_Click方法中,先加两句:

Dim picFileName as String

picFileName = App.Path & “DataBase/PIctures” XXXXXXXXXXXXXXXXXXX ‘这里我不写全了,你自己复制你那一长串代码

SavePicture XXXXXXXX的行改为:

SavePicture picPhoto.Picture picFileName

并且在下一行加一句:

SavePicToDB(PicFilename)

vb中如何向数据库中存储图片的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vb中如何向数据库中存储图片,VB中实现数据库图片存储的方法解析,VB如何将一张网图上的图片写入数据库,VB如何拍照后自动将图片保存到数据库的信息别忘了在本站进行查找喔。


数据运维技术 » VB中实现数据库图片存储的方法解析 (vb中如何向数据库中存储图片)