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

如何在VB.NET中通过ODBC连接AS400及解决填充DataSet后无数据显示问题

解决VB.NET通过ODBC连接AS400填充DataSet无数据的问题

我看了你的代码,发现几个关键问题导致你拿不到数据,咱们一步步来梳理和修正:

1. OdbcDataAdapter未实例化

你在全局声明了dm As OdbcDataAdapter,但在GetData方法里完全没对它做实例化(也就是没写dm = New OdbcDataAdapter()),直接调用dm.SelectCommand = cmd会触发空引用异常,根本走不到填充数据的步骤。

2. 连接对象管理混乱+异常处理变量错误

  • 你在GetData里又重新创建了OdbcConnection,既浪费资源,也没复用ConnServer里的连接逻辑;
  • 异常捕获里写的con.Close(),但你的连接变量名是cn,这里会直接编译报错,而且就算能运行,没判断连接状态就调用Close也会出问题。

3. 潜在的排查点

  • 先把你的SQL查询query拿到AS400自带的查询工具(比如STRSQL)里跑一遍,确认本身能返回数据;
  • 检查AS400_CA这个DSN的配置是否正确,确保能正常连接到目标服务器;
  • 确认root用户有查询目标表的权限。

修正后的代码示例

Dim cn As OdbcConnection

Sub ConnServer()
    Try
        ' 只在连接未初始化或已关闭时重新创建并打开
        If cn Is Nothing OrElse cn.State <> ConnectionState.Open Then
            cn = New OdbcConnection("DSN=AS400_CA;UID=root;PWD=*****;")
            cn.Open()
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Ecriture Comptable")
    End Try
End Sub

Public Function GetData(query As String) As DataTable
    Dim resultTable As New DataTable()
    Try
        ' 先确保连接可用
        ConnServer()
        If cn Is Nothing OrElse cn.State <> ConnectionState.Open Then
            MsgBox("连接失败,无法获取数据", MsgBoxStyle.Exclamation)
            Return resultTable
        End If

        ' 使用Using自动释放资源,避免内存泄漏
        Using cmd As New OdbcCommand(query, cn)
            Using dm As New OdbcDataAdapter(cmd)
                dm.Fill(resultTable)
            End Using
        End Using
    Catch ex As Exception
        MsgBox($"获取数据出错:{ex.Message}", MsgBoxStyle.Critical)
        ' 异常时确保连接能正确关闭
        If cn IsNot Nothing AndAlso cn.State = ConnectionState.Open Then
            cn.Close()
        End If
        cn = Nothing ' 重置连接,下次调用时重新创建
    End Try
    Return resultTable
End Function

优化说明

  • 用Using语句自动管理OdbcCommand和OdbcDataAdapter的资源,不用手动释放;
  • 统一连接管理逻辑,避免重复创建连接;
  • 异常处理里增加了连接状态检查,防止无效关闭操作;
  • 直接填充DataTable,比DataSet更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:47:39