如何从Access数据库加载图像 [英] How do I load image from access database
本文介绍了如何从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屋!
查看全文