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

将API返回的逗号分隔数据导入DataTable时遇数组过长错误

解决DataTable导入多行CSV数据时的数组长度错误

问题原因

你当前的代码错误在于:使用Split(New Char() {",", Environment.NewLine})会把逗号和换行符同时作为分隔符,将整个CSV字符串拆成一个包含所有字段的一维数组。比如两行数据会拆出8个元素(加上表头共12个),而vartable.Rows.Add(rowData)要求数组长度必须和DataTable的列数(4列)完全匹配,因此多行数据时就会抛出“Input array is longer than the number of columns in this table.”错误。

解决方案

正确的处理逻辑应该是先按换行拆分出每一行,再对每一行单独按逗号拆分列数据,逐行添加到DataTable中:

Dim vartable As DataTable = New DataTable()
vartable.Columns.Add("Name", GetType(String))
vartable.Columns.Add("ID", GetType(String))
vartable.Columns.Add("Date", GetType(String))
vartable.Columns.Add("Supervisior", GetType(String))

Dim inputstring As String = apiresponse 'API返回的CSV字符串

' 按换行符拆分所有行,自动过滤空行
Dim allRows As String() = inputstring.Split({Environment.NewLine, vbCrLf, vbLf}, StringSplitOptions.RemoveEmptyEntries)

' 跳过第一行表头(已手动定义DataTable列)
For i As Integer = 1 To allRows.Length - 1
    Dim rowText As String = allRows(i)
    ' 按逗号拆分当前行的列数据
    Dim rowData As String() = rowText.Split(","c)
    ' 可选:检查列数匹配,避免格式错误行触发异常
    If rowData.Length = 4 Then
        vartable.Rows.Add(rowData)
    End If
Next

GridView1.DataSource = vartable
GridView1.DataBind()

补充说明

  • StringSplitOptions.RemoveEmptyEntries会自动过滤拆分后产生的空行(比如字符串首尾的换行),避免无效数据干扰。
  • 同时兼容Environment.NewLine、vbCrLf和vbLf三种换行格式,适配不同系统的返回数据。
  • 增加列数检查可以避免因某行数据格式错误导致的异常,提升代码稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:42