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

DataRow.ItemArray赋值失败为空,ArgumentException异常排查求助

问题原因及解决方法

1. 直接赋值ItemArray抛出ArgumentException的原因

你的DataTable包含16列(14个CSV对应列+2个手动赋值列),但CSV解析得到的itemArray只有14个元素。DataRow.ItemArray要求数组长度必须与DataRow的列数完全一致,长度不匹配就会触发该异常。

2. CopyTo/循环赋值后Row为空、DataTable无数据的常见原因

  • DataRow未关联目标DataTable:如果你的DataRow是直接new DataRow()创建的,而非通过dataTable.NewRow()生成,这个Row不属于目标DataTable,即使赋值也不会被识别,最终DataTable无数据。
  • 列映射错误:循环赋值时,若CSV解析的列顺序与DataTable的列顺序不匹配,或索引/列名对应错误,会导致数据被赋值到无效列,看起来Row为空。
  • 数据类型不兼容:CSV解析的字符串值无法转换为DataTable对应列的类型(比如字符串转整数失败),这种情况会静默赋值失败,导致Row无有效数据。
  • 未将Row添加到DataTable:赋值完成后未调用dataTable.Rows.Add(row),Row不会被加入DataTable的行集合,最终DataTable自然没有数据。

修复示例代码

// 1. 创建与DataTable关联的Row
DataRow row = dataTable.NewRow();

// 2. 赋值CSV解析的14列(确保列顺序/类型匹配)
for (int i = 0; i < itemArray.Length; i++)
{
    // 转换数据类型后赋值,避免类型不兼容问题
    row[i] = Convert.ChangeType(itemArray[i], dataTable.Columns[i].DataType);
}

// 3. 手动赋值额外2列
row["ExtraColumn1"] = "自定义值1";
row["ExtraColumn2"] = DateTime.Now;

// 4. 将Row添加到DataTable
dataTable.Rows.Add(row);

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:07