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 的末尾列。 我想把它放到第一列来。 该如何做呢简单呢
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;
}
}
}
问题2: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 的末尾列。 我想把它放到第一列来。 该如何做呢简单呢列的位置和你插入数据库 没有必要是一一对应的
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 。 不知道这个是为什么。。
可以用 dataTable.Columns[x].SetOrdinal(y)设定
你可以百度 SetOrdinal 的具体用法
首先感谢你的回复。 这个项目是为政府做的。 他们之间每个月有个Excel表格数据 我需要做的是 读取这个表格的数据 写入数据库中。 每个月都有一份这样的数据表格。 所以我为了管理它 要给它添加一个自动增长的ID列。应为这个表格有几千行数据。 为了效率考虑 我使用了 SqlBulkCopy 批量插入数据。 所以我只能在DataTable中操作了
xls 这个表格里里的数据我已经读出来了
感谢你的回复。 开始的时候误读了 SqlBulkCopy 以为它插入数据需要跟数据库字段一样 才行。 结果证明我是错的。 我的问题解决了 谢谢大家的帮助。 只是我还是没有明白。 我这样对DataTable操作。 添加一个自动增加的列 为什么插入数据库后全部变成了NULL 。 其实 实际上我是插入了两个列。 一个自动增长的ID 一个是引用的外键ID 。这个外键ID 都添加成功了。 就是这个自动增长的ID 怎么都不明白 插入后就一直是NULL
我想着,你用一个 DataTable.Copy给另一个DataTable,然后再用拷贝的DataTable插入到数据库,应该可以达到你要得效果
恭喜你解决问题!