DataTable dt = GetExcelData();            // 添加自动增长列 TaxID
            DataColumn dc = new DataColumn("TaxID", typeof(Int32));            
            //dc.AutoIncrement = true;
            //dc.AutoIncrementSeed = 1;                           //自增长的初始值
            //dc.AutoIncrementStep = 1;            //将该列插入DataTable中
            dt.Columns.Add(dc);            dt.Columns[iCount - 1].AutoIncrement = true;
            dt.Columns[iCount - 1].AutoIncrementSeed = 1;
            dt.Columns[iCount - 1].AutoIncrementStep = 1;            //插入数据库
            dal.DoSqlBulkCopy(dt);
  一个项目 需要从Excel中读取数据, 然后添加一个自动增长列  再 批量写入数据库中。现在遇到两个问题。 怎么都没有搞明白。 只有请教各位同道中人了。。 问题 1:  我上面代码中 是添加一个自动增加的列。 可是我写入数据库后  该列全是NULL 。 不知道我代码有什么问题。。网上看了好多都应该是这样做的。 问题2: 上面代码中添加一列是在 DataTable 的末尾列。 我想把它放到第一列来。 该如何做呢简单呢

解决方案 »

  1.   

    参考:http://www.jb51.net/article/22593.htm
      

  2.   

    仅供参考using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Xml;namespace BLL.CustomerProductsEnum
    {
       public abstract class Custom_Orm_type
        {
           public static DataTable NodeTypes(string xmlfile)
           {
               List<string> types = new List<string>();
               string NodeId = null;
               DataTable Table = new DataTable();
               //DataRow row = Table.NewRow();
               DataRow row;
               int i = 0;
               DataColumn dc = null;
               dc = Table.Columns.Add("ID", Type.GetType("System.Int32"));
               dc.AutoIncrement = true;//自动增加
               dc.AutoIncrementSeed = 1;//起始为1
               dc.AutoIncrementStep = 1;//步长为1
               dc.AllowDBNull = true;//           dc = Table.Columns.Add("NodeId", Type.GetType("System.String"));
               dc = Table.Columns.Add("ParentId", Type.GetType("System.String"));
               dc = Table.Columns.Add("NodeName", Type.GetType("System.String"));
               
               return Table;
           }
        }
    }
      

  3.   

    问题1:你可以把数据库表字段属性设置成自动增长,或者用代码插入 select newid()
    问题2:DATATABLE重写
      

  4.   

    你这个想法,太依赖datatable了
    把你的问题复述一下:
     一个项目 需要从Excel中读取数据, 然后添加一个自动增长列 再 批量写入数据库中。
    你的想法:
    把excel数据读到datatable中,然后,再excel加入子增长数据?
    解答:你为何不考虑在excel加入自增长呢?那么是不是更方便。
    如果不想通过excel加入自增长,为什么不在“excel输入读到datatable中”,你为什么要简单的读,如果这个时候把RowIndex加入进去不行吗?你的问题:
    1、 我上面代码中 是添加一个自动增加的列。 可是我写入数据库后 该列全是NULL 。 不知道我代码有什么问题。  dt.Columns.Add(dc);            dt.Columns[iCount - 1].AutoIncrement = true;
                dt.Columns[iCount - 1].AutoIncrementSeed = 1;
                dt.Columns[iCount - 1].AutoIncrementStep = 1;
    在这步骤之后,你有没有调试看看dt的内容?里面是否有你增加的值?2、上面代码中添加一列是在 DataTable 的末尾列。 我想把它放到第一列来。 该如何做呢简单呢列的位置和你插入数据库 没有必要是一一对应的
      

  5.   

    我是这样做的。 先读出Excel表中的数据在 DataTable  中。 然后 DataColumn column = new DataColumn();
                column.DataType = System.Type.GetType("System.Int32");
                column.ColumnName = "TaxID";
                column.AutoIncrement = true;
                column.AutoIncrementSeed = 1;
                column.AutoIncrementStep = 1;
     dt.Columns.Add(column); 把这列自动增长的数据添加进 dt 再通过SqlBulkCopy 写入数据库。  可是每次写入的都是NULL 。 不知道这个是为什么。。
      

  6.   

    关于 dataTable的列指定顺序,
    可以用 dataTable.Columns[x].SetOrdinal(y)设定
    你可以百度 SetOrdinal 的具体用法
      

  7.   


    首先感谢你的回复。 这个项目是为政府做的。 他们之间每个月有个Excel表格数据  我需要做的是  读取这个表格的数据  写入数据库中。 每个月都有一份这样的数据表格。 所以我为了管理它  要给它添加一个自动增长的ID列。应为这个表格有几千行数据。 为了效率考虑 我使用了 SqlBulkCopy  批量插入数据。  所以我只能在DataTable中操作了
      

  8.   

    excel表格是xls格式 还是csv格式?
      

  9.   


    xls  这个表格里里的数据我已经读出来了
      

  10.   

    所以我为了管理它 要给它添加一个自动增长的ID列。@fangshaoshen可以把你数据库里面设置一个列,这样你只操心,你怎么把数据从datatable 到数据库即可 没必要非得从datatable下手 
      

  11.   

    如果是oracle数据库,可以在数据库里添加一个存储过程和触发器,在插入记录的时候,自动为记录添加一个序号值,这个序号会是自增的。
      

  12.   


    感谢你的回复。 开始的时候误读了  SqlBulkCopy   以为它插入数据需要跟数据库字段一样 才行。 结果证明我是错的。 我的问题解决了 谢谢大家的帮助。   只是我还是没有明白。 我这样对DataTable操作。 添加一个自动增加的列  为什么插入数据库后全部变成了NULL 。  其实 实际上我是插入了两个列。 一个自动增长的ID 一个是引用的外键ID  。这个外键ID 都添加成功了。  就是这个自动增长的ID  怎么都不明白 插入后就一直是NULL 
      

  13.   

    我也没这么用过 DataTable,我猜测,你自增加的这个列,还不属于真正的DataTable所拥有,应该是一个表示
    我想着,你用一个 DataTable.Copy给另一个DataTable,然后再用拷贝的DataTable插入到数据库,应该可以达到你要得效果
    恭喜你解决问题!
      

  14.   

    感谢各位的帮助. 问题解决了  关于添加列是NULL 值  我还没有去琢磨。 赶时间。  有空的时候要看看是怎么回事。 如果有哪位朋友知道 。 麻烦贴出来大家分享下吧。 。 谢谢