将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
相关产品推荐
相关产品推荐

