小弟先把sqlserver 数据 通过 Sqlhelper 帮助类 放到DataTable中(下面代码的dt就是我的数据)这步没有问题。
var ds = SqlHelper.ExecuteDataSet(DataConnect, CommandType.Text, strbuding.ToString(), sqlparm.ToArray()); DataTable dt = ds.Tables[0];
然后小弟在导出到Access中发给客户(因为数据量很大 百万级别 所以选择导出Access中)下面就是小弟的代码
using (OleDbConnection con = new OleDbConnection(_connectionStr)) { OleDbDataAdapter adapt = new OleDbDataAdapter("select * from table1", con); OleDbCommandBuilder builder = new OleDbCommandBuilder(adapt); builder.QuotePrefix = "["; builder.QuoteSuffix = "]"; adapt.Update(dt); }
Access 数据库是生成好的 dt 里面的列和Access 表名都能对上 没有问题 ,可是上面的代码就是无法导出数据,更加奇怪的是程序没有报错,正常运行,后来我手动创建了一个DataTable 执行上面的代码成功导入.
DataTable dt2 = new DataTable(); dt2.Columns.Add("ID", System.Type.GetType("System.Int32")); dt2.Columns.Add("年", System.Type.GetType("System.Int32")); DataRow dr = dt2.NewRow(); dr["年"] = "2014"; dr["ID"] = "12312312"; dt2.Rows.Add(dr); using (OleDbConnection con = new OleDbConnection(_connectionStr)) { OleDbDataAdapter adapt = new OleDbDataAdapter("select * from table1", con); OleDbCommandBuilder builder = new OleDbCommandBuilder(adapt); builder.QuotePrefix = "["; builder.QuoteSuffix = "]"; adapt.Update(dt2 ); }
很奇怪啊 为何 sqlhelper返回DT 就无法导出呢,谁能解释一下吗?
建议试试把数据分页导入,不要一次性全部查询出来。
是的 我这个已经是分批导入了 跟数据条数没关系 我导入2行数据也不行
你的看错误提示哇...
没有错误发生真的
@请求: 没有错误,就单独调试,看看那一步出问题了。
最后在网上找到了资料问题解决了,adapt.Update()在进行更新的时候 会检查你Datatable 中行的状态 ,解决办法就是循环Dt中的行 设置 DR.SetAdded()。具体我也不太理解 你们自己查看 DataRow 状态说明吧。
赞一个,回复解决办法才是王道,少侠好武功。