急急急!!!用vb.net怎么读取一个数据库access数据库中的二进制图片··

justbelost 2008-11-03 02:28:11
急急急!!!用vb.net怎么读取一个数据库access数据库中的二进制图片··
希望大家能讲细点,谢谢
...全文
177 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shyuntoo2008 2008-11-22
  • 打赏
  • 举报
回复
有没有直接读取的方法呢?
tanghuiming 2008-11-03
  • 打赏
  • 举报
回复
去看看我的贴,一切搞定,我的就是读PDF文件不行.其它的JPG,DOC任何都可以.
justbelost 2008-11-03
  • 打赏
  • 举报
回复
谢谢兄弟们啊,郁闷的事情,还是有些毛病
hsx49949046 2008-11-03
  • 打赏
  • 举报
回复
试试这个。我自已运行没问题。
Private Sub add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles add.Click
Dim sqlstr As String
Dim ds As New DataSet()
sqlstr = "select * from name2 where cstr(id)='" & 128 & "'"
Dim Comm As New OleDb.OleDbDataAdapter(sqlstr, Conn)
Comm.Fill(ds, "name")
Dim Bytes As Byte() = ds.Tables("name").Rows(0).Item("相片")
ds.Tables("name").Reset()
Dim mStream As New IO.MemoryStream
mStream.Write(Bytes, 0, Bytes.Length)
mStream.Flush()
Dim Img As New Bitmap(mStream)
PictureBox1.Image = Img
End Sub
一只熊猫 2008-11-03
  • 打赏
  • 举报
回复

Imports System.Data.SqlClient
Imports system.IO
Public Class MyImage
Public imgfield As String '更新字段名
Public tabelname As String '表
Public imgfilename As String '图像文件
Private linkstr As String
Property DataSoure() As String '连接串 Server=xxx.xxx.xxx.xx;User ID=xx;Password=xx;database=xxxx
Get
DataSoure = linkstr
End Get
Set(ByVal value As String)
Dim oconn_sql As New SqlConnection(value)
Try
oconn_sql.Open()
Catch Ex As Exception
Dim exx As New Exception("无法连接服务器")
Throw exx
Return
End Try
linkstr = value
End Set
End Property

Public Function read(ByVal sql As String) As MemoryStream '读取图片 sql为查询图片条件 read("where ID=4")
If DataSoure = Nothing Then
Dim exx As New Exception("请确定Sql地址")
Throw exx
End If
Dim oconn As New SqlConnection(DataSoure)
oconn.Open()
Dim sqlcmd As New SqlClient.SqlCommand(sql, oconn)
sqlcmd.CommandType = CommandType.Text
Dim bt() As Byte = sqlcmd.ExecuteScalar()
If Not bt Is Nothing Then
If bt.Length > 0 Then
sqlcmd = Nothing
oconn.Close()
oconn = Nothing
Return New MemoryStream(bt)
Else
Dim exx As New Exception("无图片")
Throw exx
End If
Else
Dim exx As New Exception("无数据")
Throw exx
End If
sqlcmd = Nothing
oconn.Close()
oconn = Nothing
End Function

Public Sub save(ByVal upwhere As String) '保存图片 upwhere为更新条件 save("where ID=4")
If DataSoure = Nothing Then
Dim exx As New Exception("请确定Sql地址")
Throw exx
Return
End If
If imgfield = Nothing Then
Dim exx As New Exception("请确定字段名")
Throw exx
Return
End If
If tabelname = Nothing Then
Dim exx As New Exception("请确定表名")
Throw exx
Return
End If

Dim cmdstr As String = " alter Procedure InsertImage " & Chr(13) & "@img image" & Chr(13) & "AS" & Chr(13) & "Update " & tabelname & " set " & imgfield & " = @img " & upwhere
Dim sqlcmd As New SqlCommand
Dim oconn As New SqlConnection(DataSoure)
sqlcmd.CommandText = cmdstr
sqlcmd.Connection = oconn
Try
oconn.Open()
sqlcmd.ExecuteNonQuery()
Catch ex As Exception
oconn.Close()
Dim exx As New Exception("存储过程创建失败" & ex.Message)
Throw exx
Return
End Try


Dim fs As FileStream = New FileStream(imgfilename, FileMode.Open, FileAccess.ReadWrite)
Dim bt(fs.Length) As Byte
fs.Read(bt, 0, fs.Length)
fs.Close()
fs = Nothing
Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(DataSoure)
sqlConn.Open()
sqlcmd = New SqlClient.SqlCommand("InsertImage", sqlConn)
sqlcmd.CommandType = CommandType.StoredProcedure
sqlcmd.Parameters.Add("@img", SqlDbType.Image).Value = bt
sqlcmd.ExecuteNonQuery()
sqlcmd = Nothing
sqlConn.Close()
sqlConn = Nothing


oconn.Close()

End Sub



End Class



我也是参考网上的资料写了一个类,你可以凑和着用。

MyImage.datasoure = "Server=xxx.xxx.xxx.xx;User ID=xx;Password=xx;database=xxxx"
myimage.tabelname = "test"
myimage.imgfield = "picture"
myimage.imgfilename = "C:\1.jpg"

save("where ID = 4") ' 将C:\1.jpg写入 xxxx 服务器的 test 表ID=4的 picture 字段
read("where ID = 4") ' 读出
justbelost 2008-11-03
  • 打赏
  • 举报
回复
非常感谢,但是好像有些问题,可能是我们的版本不一样,我的是2005版的
Forrest23 2008-11-03
  • 打赏
  • 举报
回复
  Dim dbcon As New OleDb.OleDbConnection
Dim dbccom As New OleDb.OleDbCommand
'存入access数据库
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fs As FileStream = New FileStream("C:\Documents and Settings\forest23\桌面\1.jpg", FileMode.Open, FileAccess.ReadWrite)
Dim bt(fs.Length) As Byte
fs.Read(bt, 0, fs.Length)
Try
dbcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\forest23\桌面\1.mdb"
dbcon.Open()
dbccom.Connection = dbcon
dbccom.CommandText = "create table pic (img longbinary)"
dbccom.CommandText = "insert into pic (img) Values (@img)"
dbccom.Parameters.Add("@img", OleDb.OleDbType.LongVarBinary).Value = bt
dbccom.ExecuteNonQuery()
dbccom = Nothing
dbcon.Close()
dbcon = Nothing
Catch
MsgBox(e.ToString)
End Try
fs.Close()
fs = Nothing
End Sub
'读取图片
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
dbcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\forest23\桌面\1.mdb"
dbcon.Open()
dbccom.Connection = dbcon
dbccom.CommandText = "select img from pic"
Dim bt() As Byte = dbccom.ExecuteScalar
If Not bt Is Nothing Then
If bt.Length > 0 Then
Dim fs As MemoryStream = New MemoryStream(bt)
Me.PictureBox1.Image = Image.FromStream(fs)
fs.Close()
fs = Nothing
Else
MsgBox("无图片")
End If
Else
MsgBox("无数据")
End If
Catch ex As Exception
Finally
dbccom = Nothing
dbcon.Close()
dbcon = Nothing
End Try
End Sub
Forrest23 2008-11-03
  • 打赏
  • 举报
回复
   Try
dbcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\forest23\桌面\1.mdb"'这是你mdb文件的位置
dbcon.Open()
dbccom.Connection = dbcon
dbccom.CommandText = "select img from pic where ID=1 "’看你access数据库里怎么存的这里该下
Dim bt() As Byte = dbccom.ExecuteScalar
If Not bt Is Nothing Then
If bt.Length > 0 Then
Dim fs As MemoryStream = New MemoryStream(bt)
Me.PictureBox1.Image = Image.FromStream(fs)
fs.Close()
fs = Nothing
Else
MsgBox("无图片")
End If
Else
MsgBox("无数据")
End If
Catch ex As Exception
Finally
dbccom = Nothing
dbcon.Close()
dbcon = Nothing
End Try
'这是读取图片
CloneCenter 2008-11-03
  • 打赏
  • 举报
回复
select zp from table1 where id = 1


直接将这个读取出来的值,放入到 byte 数组中即可。

字节数组的值可以使用 Stream 转换为图像。
Forrest23 2008-11-03
  • 打赏
  • 举报
回复
'上传图片
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fs As FileStream = New FileStream("C:\Documents and Settings\forest23\桌面\Water lilies.jpg", FileMode.Open, FileAccess.ReadWrite)
Dim bt(fs.Length) As Byte
fs.Read(bt, 0, fs.Length)
fs.Close()
fs = Nothing
Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("Server=(local);User Id=sa;Password=sa;Database=pubs")
sqlConn.Open()

Dim sqlCmd As New SqlClient.SqlCommand("sp_InsertImage", sqlConn)
sqlCmd.CommandType = CommandType.StoredProcedure
sqlCmd.Parameters.Add("@img", SqlDbType.Image).Value = bt
sqlCmd.ExecuteNonQuery()
sqlCmd = Nothing
sqlConn.Close()
sqlConn = Nothing
MsgBox("图片插入成功", MsgBoxStyle.Information)
End Sub
'读取图片
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("Server=(local);User Id=sa;Password=sa;Database=pubs")
sqlConn.Open()
Dim sqlCmd As New SqlClient.SqlCommand("SELECT img FROM test WHERE t_ID=70", sqlConn)
sqlCmd.CommandType = CommandType.Text

Dim bt() As Byte = sqlCmd.ExecuteScalar()
If Not bt Is Nothing Then
If bt.Length > 0 Then
Dim fs As MemoryStream = New MemoryStream(bt)
pbReview.Image = Image.FromStream(fs)
fs.Close()
fs = Nothing

Else
MsgBox("无图片")
End If
Else
MsgBox("无数据")
End If

sqlCmd = Nothing
sqlConn.Close()
sqlConn = Nothing

End Sub
'这个是sql数据库的跟access差不多,你改下就可以了

16,555

社区成员

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

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