vb.net2010从ACCESS的OLE字段读出图片显示到PictureBox控件上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net2010从ACCESS的OLE字段读出图片显示到PictureBox控件上相关的知识,希望对你有一定的参考价值。

vb.net2010从ACCESS的OLE字段读出图片显示到PictureBox控件上
请给出确定能运行成功的一段代码
另外问一下,ACCESS的OLE字段能保存JPG图片吗?
如果可以的话怎么在ACCESS中手动保存,怎么用VB.net读取显示到控件上
目前的代码如下,但运行到最后一行会提示“参数无效”
Dim pic() As Byte = CType(tbl.Rows(0).Item("img1"), Byte())
Dim mem As New MemoryStream(pic)
pic1.Image = Image.FromStream(mem)
把CType改成DirectCast也不行。
这个是我打错了,我改成AS也不行。
一楼的办法还是不行。
我把语句改成 select img1 from solution where id=1还是不行
我图上的文件长度明明是6262,改了select语句后长度还是6262,说明这个图片的长度就是6262啊。

这是vb2005的代码,你试一下,这是我以前做的一段代码,从库中读取到显示。
olecon = New OleDbConnection(constr)
olecon.Open()
Dim comm As New OleDbCommand("select 照片 from 表 where name='李三', olecon)
Dim reader As OleDbDataReader = comm.ExecuteReader
reader.Read()
Dim photofile() As Byte
photofile = reader.GetValue(0)
Dim streamph As New MemoryStream(photofile)
PictureBox1.Image = Image.FromStream(streamph)
这段代码是我从我做的小软件中截出来的,我在2005中就用着,2005是通过的,不知道加到2010中能否执行。
-------------------------------
根据你的发的图,我看了,好像你从库中取出的不是一条记录呀,我的代码只能取一条记录的情况,你的明显取出多条记录,代码只认最后一条,你的文件长度为0,当然不行了
select 照片 from 表 where name='李三',这条语句只能取出单条记录,且ole字段中确定有文件存在的,而且是图片格式才能显示
-------------------------------------------------------
Dim streamph As New MemoryStream(photofile)
你的是 Dim streamph = New MemoryStream(photofile)

这句你的和我的不一样,是不是这里的问题,2010没用过,要是还不行,我也不知道了
参考技术A 解决了

Dim pic() As Byte = CType(tbl.Rows(0).Item("img1"), Byte())
Dim mem As New MemoryStream(pic, &H9A, pic.Length - &H9A)
pic1.Image = Image.FromStream(mem)本回答被提问者采纳

如何从 Access 数据库 VB.net 中检索特定数据?

【中文标题】如何从 Access 数据库 VB.net 中检索特定数据?【英文标题】:How to retrieve specific data from Access database VB.net? 【发布时间】:2021-12-13 23:58:59 【问题描述】:

我正在尝试从具有所选客户 ID 的客户帐户数据库中检索特定值。我不确定该怎么做,这就是我目前所拥有的。

我将从组合框中选择客户 ID,那么我将如何在我的代码中使用 SQL 声明它?

Dim con As New OleDbConnection 'a new connection for the database is assigned 
        con.ConnectionString = "Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\Users\Hamza\Documents\POS system1.accdb "
        con.Open()


        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        cmd = New OleDbCommand("Select Points from customers WHERE CustID= @CustID", con)  'query used to select all field
        dr = cmd.ExecuteReader

        txtdiscount.Text = Convert.ToInt32(dr)

        con.Close()

【问题讨论】:

您缺少将 OleDbParameter 添加到 OleDbCommand。 ...另外,您当前的代码要求您dr.Read() 读者,或使用ExecuteScalar 要考虑的另一件事是,如果您只从数据库返回一个值,您可以考虑使用 ExecuteScaler。另请注意,dr 是一个对象,其中包含返回的每个字段的属性,然后您必须阅读 @HardCode 谢谢!你知道我该怎么做吗? 不能使用 dLookup 吗? support.microsoft.com/en-us/office/… 【参考方案1】:

不要将数据库代码与用户界面代码混在一起。

连接和命令应该调用它们的Dispose 方法,以便它们可以释放非托管资源。 Using...End Using 块将为您处理此问题(并关闭连接)。你需要为@ID添加一个参数。

ExecuteScalar 的使用在 cmets 中得到解决。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ID = CInt(ComboBox1.SelectedItem)
    Dim Points = GetPointsByID(ID)
    txtdiscount.Text = Points
End Sub

Private Function GetPointsByID(ID As Integer) As String
    Dim pts As String = ""
    Using con As New OleDbConnection("Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\Users\Hamza\Documents\POS system1.accdb "),
            cmd As New OleDbCommand("Select Points from customers WHERE CustID= @CustID", con)
        cmd.Parameters.Add("@CustID", OleDbType.Integer).Value = ID
        con.Open()
        pts = CStr(cmd.ExecuteScalar)
    End Using
    Return pts
End Function

【讨论】:

谢谢!它奏效了。

以上是关于vb.net2010从ACCESS的OLE字段读出图片显示到PictureBox控件上的主要内容,如果未能解决你的问题,请参考以下文章

从 VB.NET 查询 Access 数据库中的 Yes/No 字段

在我的应用程序中显示 Microsoft Access“OLE 对象”

在 VB.NET 中使用 OleDb.NET 调用 Access 2010 存储选择查询的异常

在数据库中获取日期时出错(BETWEEN 子句| VB.NET|OLE)

VB.Net & Access - 设置两个外键,引用同一个表/字段

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?