IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]System.ArgumentException: 输入数组长度大于此表中的列数。

    testcs_dn发表于 2015-09-03 08:57:48
    love 0

    完整错误信息

    System.ArgumentException: 输入数组长度大于此表中的列数。
    在 System.Data.DataTable.NewRecordFromArray(Object[] value)
    在 System.Data.DataRowCollection.Add(Object[] values)
    在 \MainFrm.ImportDB_InsertRecord(OleDbTransaction dbtran, DataTable destTable, String insertCommand, DataRow dr_src, String pKColumnName, Int32& primaryKeyValue, FilterColumn filterColumn) 位置 J:\csProjects\Main.cs:行号 2636
    在 \MainFrm.ImportDB_ImportTable(OleDbConnection con_src, OleDbTransaction dbtran, String tableName, FilterColumn filterColumn) 位置 J:\csProjects\Main.cs:行号 2573
    在 \MainFrm.ImportDB_ImportContract(OleDbConnection con_src, OleDbTransaction dbtran, String ProjectID_src, Int32& impContract_exist, Int32& impContract_succe) 位置 J:\csProjects\Main.cs:行号 2519
    在 \MainFrm.ImportDB_ImportProject(String srcDBFilePath) 位置 J:\csProjects\Main.cs:行号 2382

    错误代码行

    destTable.Rows.Add(dr_src.ItemArray);

    destTable类型为:System.Data.DataTable
    dr_src的类型为:System.Data.DataRow

    错误原因

    dr_src包含的列数大于destTable包含的列数。

    解决方案

    根据目标数据表的结构生成新行,然后逐个字段填充;

    DataRow dr_new = destTable.NewRow();
    foreach (DataColumn dc in destTable.Columns)
    {
        if (dr_src.Table.Columns.Contains(dc.ColumnName))
        {
            dr_new[dc.ColumnName] = dr_src[dc.ColumnName];
        }
    }


沪ICP备19023445号-2号
友情链接