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

DataTable加载失败:输入字符串格式错误排查求助

问题排查与修复方案

这个错误明确指向RecordType列的数据和DataTable定义的Int16类型不匹配——数据库中存在无法转换为Int16的值(大概率是空值、非数字内容,或超出Int16范围的数值),导致TableAdapter读取时失败。按以下步骤排查修复:

  • 直接验证SQL查询结果:找到GetDuplicates对应的SQL语句,在数据库客户端(如SSMS、Navicat)执行这条查询,检查返回的RecordType列,重点找空值、空格、字母/符号这类非数字内容,或者超出Int16范围(-32768~32767)的数值。这是最快定位异常数据的方法。

  • 核对TableAdapter的字段映射:打开DataSet设计器,找到tblMainTableAdapter的GetDuplicates方法,确认RecordType列的返回类型是Int16,排查是否因为数据库表结构变更(比如字段类型被修改)导致TableAdapter未同步更新。如果是,重新生成TableAdapter。

  • 追溯上游数据写入问题:既然之前正常运行,说明是近期有非法数据流入。检查最近的业务操作日志、批量导入记录或用户提交的表单,看是否存在给RecordType传入空值、非数字内容的情况,找到源头后在业务层添加数据校验(比如前端限制输入数字、后端判断类型合法再写入)。

  • 临时调试定位异常行:如果暂时无法直接执行SQL,可以在代码中临时添加遍历逻辑排查:

    Dim allData As DataTable = MainTA.GetData()
    For Each row As DataRow In allData.Rows
        Dim val As Object = row("RecordType")
        If val Is DBNull.Value OrElse Not IsNumeric(val) Then
            ' 输出异常行的主键或标识,方便定位
            Console.WriteLine($"异常行ID: {row("ID")}, RecordType值: {val}")
        End If
    Next
    
  • 修复现有异常数据:找到问题数据后,在数据库中执行更新语句修正,示例如下(根据数据库类型调整):

    -- SQL Server示例:将空值/空字符串改为默认值0
    UPDATE tblMain SET RecordType = 0 WHERE RecordType IS NULL OR RecordType = ''
    -- 过滤删除非数字的非法数据(谨慎操作)
    DELETE FROM tblMain WHERE ISNUMERIC(RecordType) <> 1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:57:27