You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm VB.Net迁移Access数据库:查询结果无法显示至文本框报错

问题解决:ADODB.Recordset字段转字符串报错

错误原因

你用rs(7)直接赋值给文本框时,返回的是ADODB.Field对象,不是字段的实际值,因此触发“转换‘Field’类型到‘String’类型无效”的错误。

修复步骤

1. 直接修改字段取值方式

将字段访问改为读取Value属性,同时处理可能的空值(DBNull):

' 替换原赋值语句
If Not rs.EOF AndAlso Not rs(7).Value Is DBNull.Value Then
    Me.txtProduct.Text = rs(7).Value.ToString()
Else
    Me.txtProduct.Text = "" ' 空值时显示空字符串
End If

2. 优化代码(推荐)

  • 使用参数化查询避免SQL注入风险
  • 用Using语句自动释放资源,替代手动置空和关闭
  • 采用强类型声明ADODB对象(需添加引用:项目→添加引用→COM→Microsoft ActiveX Data Objects x.x Library)

优化后的完整代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim db As String = "C:\Users\Dennis\Documents\Blending & Filling\Basis Olie Lossing\Base Oils.accdb"
    Dim sql As String = "Select * from [Planning] where [Bestelbon] = ?"

    ' Using语句自动管理连接和记录集资源
    Using con As New ADODB.Connection
        Using rs As New ADODB.Recordset
            con.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & db)
            
            ' 参数化查询,防范SQL注入
            Dim cmd As New ADODB.Command
            cmd.ActiveConnection = con
            cmd.CommandText = sql
            cmd.Parameters.Append(cmd.CreateParameter("Bestelbon", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 50, Me.txtBestelbon.Text))
            
            rs.Open(cmd)
            
            ' 赋值前检查记录是否存在、字段是否为空
            If Not rs.EOF AndAlso Not rs.Fields(7).Value Is DBNull.Value Then
                Me.txtProduct.Text = rs.Fields(7).Value.ToString()
            Else
                Me.txtProduct.Text = ""
            End If
        End Using
        con.Close()
    End Using
End Sub

额外说明

  • 建议用列名代替索引(比如rs.Fields("ProductColumnName").Value),代码更易读且不易因表结构变更出错
  • 确保Bestelbon字段类型与文本框值类型匹配,若为数字类型,参数类型需改为adInteger等对应类型

内容的提问来源于stack exchange,提问作者Don Quixote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:55:11