重提:数据库图片读取(vb.net+Access)

古今多少事 2009-05-30 11:55:22
我的Access数据库中有一表MyName,表中有两字段:图片名称(文本类型)、图片(OLE对象类型)。代码如下:

Imports System.IO
Imports System.Data.OleDb

Public Class Form1
Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\db1.mdb")
Dim MyCommand As OleDbCommand
Dim MyAdapter As OleDbDataAdapter
Dim MyDataSet As New DataSet


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

MyConnection.Open()
MyCommand = New OleDbCommand("Select * from MyName", MyConnection)
MyAdapter = New OleDbDataAdapter(MyCommand)
MyAdapter.Fill(MyDataSet, "picture")
'Me.DataGridView1.DataSource = MyDataSet
'Me.DataGridView1.DataMember = "picture"

Dim arrPicture() As Byte = CType(MyDataSet.Tables("picture").Rows(0)("图片"), Byte()) '将数据库中的图片转换成无符合字节数组
Dim TempMemoryStream As New MemoryStream(arrPicture)
PictureBox1.Image = Image.FromStream(TempMemoryStream)'错误就在此句
End Sub


现在的问题是:执行到最后一句时提示“参数无效”,晕!请各位帮忙看下,就这一问题,由于一些原因,我暂时不想换其他的数据库。谢谢!
...全文
534 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangxhdl 2010-02-25
  • 打赏
  • 举报
回复
最后问题出在什么地方,我怎么没有看明白。我也是打开一个之前的数据库,出现同样的问题。请指教
哥是龙王 2009-06-07
  • 打赏
  • 举报
回复
这说明你保存到库中的图片出现了问题,你的程序应该没问题,先把记录里面的图片保存成普通文件,看看有没有问题。
古今多少事 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fujiandragon 的回复:]
试试看这样行不行
PictureBox1.Image =Image.FromFile(Application.StartupPath & "\monkey.bmp")
[/Quote]


谢谢!这样会显示“内存不足”的错误。记得以前也试过。
哥是龙王 2009-06-07
  • 打赏
  • 举报
回复
试试看这样行不行
PictureBox1.Image =Image.FromFile(Application.StartupPath & "\monkey.bmp")
古今多少事 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ASDFY 的回复:]
引用 12 楼 zgke 的回复:
我的意思不是保存到本地 你是怎么保存到数据库的.



哦,是这样的,以前在VB6.0时做过相同的图片存取程序,现在就是借用以前的那个数据库,在.net中没有做过保存的操作。不会就是这个原因吧?请指教!
[/Quote]

呵呵,就是这个原因。问题解决了,太爽了……

有点奇怪,想不通啊,不过这个是次要的啦。马上结贴!谢谢大家!
sytsyt0329 2009-06-03
  • 打赏
  • 举报
回复
应该不会是以前的vb6做数据库的原因
boyibyy 2009-06-02
  • 打赏
  • 举报
回复
玩过来,玩过去!!!
zgke 2009-06-02
  • 打赏
  • 举报
回复
我的意思不是保存到本地 你是怎么保存到数据库的.
古今多少事 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zgke 的回复:]
我的意思不是保存到本地 你是怎么保存到数据库的.
[/Quote]

哦,是这样的,以前在VB6.0时做过相同的图片存取程序,现在就是借用以前的那个数据库,在.net中没有做过保存的操作。不会就是这个原因吧?请指教!
古今多少事 2009-06-01
  • 打赏
  • 举报
回复
不好意思,重贴一下:

Imports System.IO
Imports System.Data.OleDb

Public Class Form1
Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\db2003.mdb")
Dim MyCommand As OleDbCommand
Dim MyAdapter As OleDbDataAdapter
Dim MyDataSet As New DataSet


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

MyConnection.Open()
MyCommand = New OleDbCommand("Select * from 表1", MyConnection)
MyAdapter = New OleDbDataAdapter(MyCommand)
MyAdapter.Fill(MyDataSet, "picture")

'*********************************************************

'从数据库读取图片暂时存储为monkey.bmp,然后加载到image控件里面
Dim data As Byte() = MyDataSet.Tables("picture").Rows(0)("图片") '将数据库中的图片转换成无符号字节数组
Dim myfilestream As New System.IO.FileStream(Application.StartupPath & "\monkey.bmp", IO.FileMode.Create)
myfilestream.Write(data, 0, data.Length)
myfilestream.Close()
PictureBox1.Image = New Bitmap(Application.StartupPath & "\monkey.bmp") '错误和下面一样也在此句

'*********************************************************

'Dim arrPicture() As Byte = CType(MyDataSet.Tables("picture").Rows(0)("图片"), Byte()) '将数据库中的图片转换成无符合字节数组
'Dim TempMemoryStream As New MemoryStream(arrPicture)
'PictureBox1.Image = Image.FromStream(TempMemoryStream) '错误就在此句

End Sub



是这样保存的吗(星号部分)?错误提示一样,请帮着再看看,谢谢!
古今多少事 2009-06-01
  • 打赏
  • 举报
回复
Imports System.IO
Imports System.Data.OleDb

Public Class Form1
Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\db2003.mdb")
Dim MyCommand As OleDbCommand
Dim MyAdapter As OleDbDataAdapter
Dim MyDataSet As New DataSet


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

MyConnection.Open()
MyCommand = New OleDbCommand("Select * from 表1", MyConnection)
MyAdapter = New OleDbDataAdapter(MyCommand)
MyAdapter.Fill(MyDataSet, "picture")

'*********************************************************

'从数据库读取图片暂时存储为monkey.bmp,然后加载到image控件里面
Dim data As Byte() = MyDataSet.Tables("picture").Rows(0)("图片") '将数据库中的图片转换成无符号字节数组
Dim myfilestream As New System.IO.FileStream(Application.StartupPath & "\monkey.bmp", IO.FileMode.Create)
myfilestream.Write(data, 0, data.Length)
myfilestream.Close()
PictureBox1.Image = New Bitmap(Application.StartupPath & "\monkey.bmp") '错误和下面一样也在此句

'*********************************************************

'Dim arrPicture() As Byte = CType(MyDataSet.Tables("picture").Rows(0)("图片"), Byte()) '将数据库中的图片转换成无符合字节数组
'Dim TempMemoryStream As New MemoryStream(arrPicture)
'PictureBox1.Image = Image.FromStream(TempMemoryStream) '错误就在此句
'Dim TempMemoryStream As New MemoryStream(arrPicture)
'PictureBox1.Image = Image.FromStream(TempMemoryStream)
End Sub



是这样保存的吗(星号部分)?错误提示一样,请帮着再看看,谢谢!
zgke 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ASDFY 的回复:]
引用 6 楼 zgke 的回复:
你给 Dim TempMemoryStream As New MemoryStream(arrPicture)
加个短先...检查下 arrPicture数据. ..但看前面的byte[] 和最后几个 是否和保存的时候一样.一般都是保存的时候就损坏了数据.


谢谢你的回复!
刚才看了一下,前后是有差别的,保存前从byte[255]开始就是一连串的“?”,保存后还不到255就是“?”。不知这个问题如何解决?真是晕啊>>>>>
但在网上搜到的都是这样做的,你们都成功…
[/Quote]

贴出你的保存代码把.
zenowolf 2009-05-31
  • 打赏
  • 举报
回复
TempMemoryStream 里数据是否存在
调试看看
支持~
古今多少事 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zgke 的回复:]
你给 Dim TempMemoryStream As New MemoryStream(arrPicture)
加个短先...检查下 arrPicture数据. ..但看前面的byte[] 和最后几个 是否和保存的时候一样.一般都是保存的时候就损坏了数据.
[/Quote]

谢谢你的回复!
刚才看了一下,前后是有差别的,保存前从byte[255]开始就是一连串的“?”,保存后还不到255就是“?”。不知这个问题如何解决?真是晕啊>>>>>
但在网上搜到的都是这样做的,你们都成功了吗?好孤单!!!
Luoning9527 2009-05-31
  • 打赏
  • 举报
回复
Could you please attach the details of "Exception" that your program thrown, and call stack?
zgke 2009-05-31
  • 打赏
  • 举报
回复
你给 Dim TempMemoryStream As New MemoryStream(arrPicture)
加个短先...检查下 arrPicture数据. ..但看前面的byte[] 和最后几个 是否和保存的时候一样.一般都是保存的时候就损坏了数据.
古今多少事 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cpio 的回复:]
看看
arrPicture长度对不对
[/Quote]

对的:
arrPicture {Length :390094}
cpio 2009-05-31
  • 打赏
  • 举报
回复
看看
arrPicture长度对不对

wuyq11 2009-05-30
  • 打赏
  • 举报
回复
TempMemoryStream 里数据是否存在
调试看看
古今多少事 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
TempMemoryStream 里数据是否存在
调试看看
[/Quote]

好像有数据,节选部分如下(不太懂):

Length :390094
ReadTimeout:{"此流上不支持超时。"}

16,557

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧