如何从Access数据库加载图像 [英] How do I load image from access database

查看:89
本文介绍了如何从Access数据库加载图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我想要访问加载图像时出错。



错误:System.ArgumentException:'参数无效。'



我尝试过:



我的代码:

I have an error when I want load image from access.

Error: "System.ArgumentException: 'Parameter is not valid.'"

What I have tried:

My code:

Dim RetVal As Long
Dim FieldLen As Int32

Dim AccessConnection As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\mochis.mdb;User Id=admin;Password=;")
Dim AccessCommand As New OleDb.OleDbCommand("SELECT image FROM catalogo WHERE codigo = '" & TextBox1.Text & "'", AccessConnection)

AccessConnection.Open()
Dim AccessDataReader As OleDb.OleDbDataReader = AccessCommand.ExecuteReader(CommandBehavior.SequentialAccess)
AccessDataReader.Read()
FieldLen = AccessDataReader.Item(0).Length
Dim PictureByteArray(FieldLen - 1) As Byte
Dim startIndex As Integer = 0
RetVal = AccessDataReader.GetBytes(0, startIndex, PictureByteArray, 0, PictureByteArray.Length)
Dim BLOBDataStream As New MemoryStream(PictureByteArray)
Me.PictureBox1.Image = Image.FromStream(BLOBDataStream)

AccessDataReader.Close()
AccessConnection.Close()

推荐答案

首先,你必须使用参数化查询,而不是串联字符串,因为你的代码是 SQL注入 [ ^ ]易受攻击的



如果您只想图像,我会这样做:



First of all, you have to use parameterized queries, instead of concatenated string, because your code is SQL Injection[^] vulnerable

If you would like only image, i'd do that this way:

Dim sDbPath As String = Application.StartupPath & "\mochis.mdb"
Dim sConn As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;", sDbPath)
Dim ms As MemoryStream = New MemoryStream()
Dim sSql As String = "SELECT image FROM catalogo WHERE codigo=@codigo"
Using oConn As OleDbConnection = New OleDbConnection(sConn)
    oConn.Open()
    Using oComm As OleDbCommand = New OleDbCommand(sSql, oConn)
        oComm.Parameters.Add("@codigo", OleDbType.VarChar).Value = TextBox1.Text;
        Dim imagedata As Byte() = oComm.ExecuteScalar()
        ms.Write(imagedata, 0, imagedata.Length)
        ''load image from stream!
        Me.PictureBox1.Image = Image.FromStream(ms)
        oComm.Dispose()
    End Using
    oConn.Close()
    oConn.Dispose()
End Using





注意:为了能够使用此代码,您必须安装 MS Access数据库2010驱动程序 [ ^ ]



有关连接的更多详细信息,请参阅:访问连接字符串 - ConnectionStrings.com [ ^ ] < br $> b $ b

祝你好运!



Note: to be able to use this code, you have to install MS Access database 2010 driver[^]

For further details about connection, please see: Access connection strings - ConnectionStrings.com[^]

Good luck!


这篇关于如何从Access数据库加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆