如何才能往数据库里读取图片数据或者从数据库里读图片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何才能往数据库里读取图片数据或者从数据库里读图片相关的知识,希望对你有一定的参考价值。

给你提供个ACCESS版的VB代码,使用时调用这些过程即可:

'使用ADODB.Stream来保存/读取图像文件到数据库
'引用Microsoft ActiveX Data Objects 2.5 Library及以上版本

'保存文件到数据库中
Sub SaveFile()
Dim Stm As New ADODB.Stream
Dim Cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strCnn As String

strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & _
App.Path & "\DB1.mdb"
Cnn.Open strCnn

'读取文件到内存(二进制模式)
With Stm
.Type = adTypeBinary
.Open
.LoadFromFile App.Path + "\Image1.bmp"
End With

With rs
.Open "SELECT * FROM TABLE1", Cnn, 1, 3
.AddNew
.Fields("IMAGE") = Stm.Read
.Update
End With

rs.Close
Stm.Close
Set rs = Nothing
Set Cnn = Nothing
Set Stm = Nothing
End Sub

'从数据库中读取图像文件
Sub ReadFile()
Dim Stm As New ADODB.Stream
Dim Cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strCnn As String

strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & _
App.Path & "\DB1.mdb"
Cnn.Open strCnn
rs.Open "SELECT IMAGE FROM TABLE1 WHERE ID = 18", Cnn, adOpenKeyset, adLockReadOnly

'保存到文件
With Stm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs("IMAGE")
.SaveToFile App.Path + "\Image2.bmp"
End With

'显示图片
Picture1.Picture = LoadPicture(App.Path + "\Image2.bmp")

rs.Close
Stm.Close
Set rs = Nothing
Set Cnn = Nothing
Set Stm = Nothing
End Sub
参考技术A 我认为可以有以下几种方式:
1、可以将图片读写成字节码,然后存储到数据库中,在调用的时候再将其读写出来;
2、可以单纯的只保存图片的地址,然后在程序中调用这个图片的地址即可访问到;
参考技术B

王大伟,这题我不要了,你随意认证,任意拒绝,我已举报。

参考技术C use binary read or write,change it to binary stream 参考技术D 摘 要 本文以VB6与Access97作为开发工具,介绍了图像在数据库中的存储与显示技术。

关键词 数据库,数据控件,二进制,图像存储,图像显示,ADODB,Recordset

数据库是数据管理的最新技术,是计算机科学的重要分支,是现代计算机信息系统和计算机应用的基础和核心。在科学技术高速发展的今天,在信息资源无处不在、无处不用,已成为各部门的重要财富的时候,对于从事程序开发的人员来说显得尤为重要。

如今,对数据库的操作不仅仅满足于对字符和数字的单一操作,图像的存储与显示已显得尤为重要。下面作者将以VB6.0与Access97作为开发工具,分别介绍两种图像显示与存储的方法。

利用数据控件和数据绑定控件

利用这种方法,不写或写少量代码就可以构造简单的数据库应用程序,这种方法易于被初学者接受。在举例之前,先把数据绑定功能简要的说明一下,凡是具有DataSource属性的控件都是对数据敏感的,它们都能通过数据控件直接使用数据库里的数据。比如CheckBox Control , ComboBox Comtrol , TextBox Comtrol , PictureBox Control ,Image Comtrol … 因为这种方式涉及到的知识点比较少,也比较容易理解,不多作说明,现直接介绍编程步骤。

1、从数据库中显示所需要的图片

首先,添加一个Data数据控件,设置它的DatabaseName和RecordSource属性,

strPath = App.Path
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
MyData.DatabaseName = strPath & "ExampleDB.mdb" '数据库存地址
MyData.RecordSource = "Info" '表名

第二步,添加Image控件用来显示图片,设置它的DataSource和DataField属性。例如本例中: Image1.DataSource="MyData"和Image1.DataField=" MyPhoto" 。然后设置其它具有数据绑定功能的控件用来显示所要的其它内容,经过这两步的操作,运行程序就可以显示你要的数据了。

2、向数据库中添加需要存储的图片

首先,利用数据控件所具有的AddNew属性,添加一个按钮,双击后添加如下代码MyData.Recordset.AddNew

第二步,为Image控件图片指定图片路径Image1.Picture = LoadPicture("图片路径"),经过这两步的操作,就可以向数据库中添加图片了。

这种方法最简单快捷,要写的代码量很少。但是这种方法在运行速度和灵活性方面有一定的限制,适合于初学者和一些简单的应用,要想灵活多变的显示图像,下面介绍的方法或许更适应您的要求。

利用编写代码实现图片的存储与显示

这种方法相对于方法一来说,代码量大,但是它操作灵活,能够满足多样形式下的操作,受到更多编程者的青睐。但是涉及到的知识面相对要多一些,不仅要掌握数据库的操作方法,还要二进制文件的读写作进一步的了解。关于数据库及二进制文件的基本操作很多参考书上都介绍的比较详细,需要时请查阅即可。在编程之前把本部分用到的变量说明如下:

Dim RS As New ADODB.Recordset
Dim Chunk() As Byte
Const ChunkSize As Integer = 2384
Dim DataFile As Integer, Chunks, Fragment As Integer
Dim MediaTemp As String
Dim lngOffset, lngTotalSize As Long
Dim i As Integer

1、从数据库中显示所需要的图片

第一步首先打开数据库,看有没有要查找的内容,有则继续执行,没有就退出

RS.Source = "select * from Info Where Name='" & sparaName &"';"
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open
If RS.EOF Then RS.cCose : Exit Sub

第二步,读出长二进制数据即图片数据,把它转换成图片文件,操作过程如下

MediaTemp = strPath & "picturetemp.tmp"
DataFile = 1
Open MediaTemp For Binary Access Write As DataFile
lngTotalSize = RS!MyPhoto.ActualSize
Chunks = lngTotalSize \ ChunkSize
Fragment = lngTotalSize Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = RS!MyPhoto.GetChunk(Fragment)
Put DataFile, , Chunk()
For i = 1 To Chunks
ReDim Chunk(ChunkSize)
Chunk() = RS!MyPhoto.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i
Close DataFile

第三步,关闭数据库,这样就可以显示所要的图片了。

RS.Close
If MediaTemp = "" Then Exit Sub
Picture1.Picture = LoadPicture(MediaTemp)
If Picture1.Picture = 0 Then Exit Subj

2、向数据库中添加需要存储的图片

向数据库添加存储的图片是显示图片逆过程,只要掌握了显示图片的操作,存储图片的操作也就迎刃而解了,下面将操作步骤介绍如下

第一步首先打开数据库,过程如下:

RS.Source = "select * from Info ;"
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open

第二步,把要存储的图片转换成二进制长文件存入数据库中,操作过程如下

RS.AddNew
DataFile = 1
Open strPathPicture For Binary Access Read As DataFile
FileLen = LOF(DataFile) ' 文件中数据长度
If FileLen = 0 Then : Close DataFile : RS.Close : Exit Sub
Chunks = FileLen \ ChunkSize
Fragment = FileLen Mod ChunkSize
ReDim Chunk(Fragment)
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For i = 1 To Chunks
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
Next i
Close DataFile

第三步,更新纪录后,关闭数据库,就完成了数据图片到数据库的存储。

RS.Update
RS.Close
Set RS = Nothing

两种方法在使用方面各有所长,读者可以针对自己的情况做出合理的选择。

方法很容易实现的.和楼上的不太一样.

谢谢啊~

c#从数据库中读取图片出现参数无效

从SQL Server2000中读取图片 int i = 1; byte[] mybyte = ((byte[])dr["picture"]); //创建内存流。 MemoryStream myStream = new MemoryStream(); //图片二进制,写入内存 foreach (byte a in mybyte) myStream.WriteByte(a); //以内存数据流,创建图片对象。 Image myImage = Image.FromStream(myStream); myStream.Close(); //图片框赋值,显示出该图片对象。 i++; 在Image myImage = Image.FromStream(myStream); 出现参数无效错误。但之前相同个的语句在有datagridview的地方用过N次了。都没出现过问题,都可以读取出来,请问datagridview是不是有什么机制啊

MemoryStream myStream = new MemoryStream(mybyte); foreach就可以省了。 一般我用他读datarow没试过读dgv,dgv dgv可以绑定datatable,操作起来很省事。 参考技术A 说明: DataGridView 控件替换了 DataGrid 控件并添加了功能;但是也可选择保留 DataGrid 控件以备向后兼容和将来使用。有关更多信息,请参见 Windows 窗体 DataGridView 控件和 DataGrid 控件之间的区别。 使用DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据。 将数据绑定到 DataGridView 控件非常简单和直观,在大多数情况下,只需设置 DataSource 属性即可。在绑定到包含多个列表或表的数据源时,只需将 DataMember 属性设置为指定要绑定的列表或表的字符串即可。 DataGridView 控件支持标准 Windows 窗体数据绑定模型,因此该控件将绑定到下表所述的类的实例: 任何实现 IList 接口的类,包括一维数组。任何实现 IListSource 接口的类,例如 DataTable 和 DataSet 类。任何实现 IBindingList 接口的类,例如 BindingList(Of T) 类。任何实现 IBindingListView 接口的类,例如 BindingSource 类。 DataGridView 控件支持对这些接口所返回对象的公共属性的数据绑定,如果在返回的对象上实现 ICustomTypeDescriptor 接口,则还支持对该接口所返回的属性集合的数据绑定。 通常绑定到 BindingSource 组件,并将 BindingSource 组件绑定到其他数据源或使用业务对象填充该组件。BindingSource 组件为首选数据源,因为该组件可以绑定到各种数据源,并可以自动解决许多数据绑定问题。有关更多信息,请参见 BindingSource 组件。 DataGridView 控件还可以在“取消绑定”模式下使用,无需任何基础数据存储区。有关使用未绑定的 DataGridView 控件的代码示例,请参见演练:创建未绑定的 Windows 窗体 DataGridView 控件。 DataGridView 控件具有极高的可配置性和可扩展性,它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当需要在 Windows 窗体应用程序中显示表格数据时,请首先考虑使用 DataGridView 控件,然后再考虑使用其他控件(例如 DataGrid)。若要以小型网格显示只读值,或者若要使用户能够编辑具有数百万条记录的表,DataGridView 控件将为您提供可以方便地进行编程以及有效地利用内存的解决方案。本回答被提问者采纳

以上是关于如何才能往数据库里读取图片数据或者从数据库里读图片的主要内容,如果未能解决你的问题,请参考以下文章

java从数据库里读文件变乱码

java里怎么把从数据库里读取的图片类型数据 显示到页面上啊 ?

怎么用java从文件中读取图片和写入图片到文件里

java如何获取数据库里的图片高宽

python 图片读取 常用操作方法

WPF——ComboBox控件怎么绑定数据