我有一List<MyObject>百万元素.(它实际上是一个SubSonic Collection,但它没有从数据库加载).
我目前正在使用SqlBulkCopy,如下所示:
private string FastInsertCollection(string tableName, DataTable tableData)
{
string sqlConn = ConfigurationManager.ConnectionStrings[SubSonicConfig.DefaultDataProvider.ConnectionStringName].ConnectionString;
using (SqlBulkCopy s = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.TableLock))
{
s.DestinationTableName = tableName;
s.BatchSize = 5000;
s.WriteToServer(tableData);
s.BulkCopyTimeout = SprocTimeout;
s.Close();
}
return sqlConn;
}
Run Code Online (Sandbox Code Playgroud)
我使用SubSonic的MyObjectCollection.ToDataTable()从我的集合中构建DataTable.但是,这会在内存中复制对象并且效率低下.我想使用SqlBulkCopy.WriteToServer方法,该方法使用IDataReader而不是DataTable,这样我就不会在内存中复制我的集合.
从我的列表中获取IDataReader的最简单方法是什么?我想我可以实现一个自定义数据阅读器(如http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx)但是如果不编写一堆通用代码,我必须做一些更简单的事情.
编辑:似乎没有人可以从对象集合中轻松生成IDataReader.接受当前的答案,即使我希望框架中内置的东西.
我正在寻找关于如何从.NET Web应用程序创建与DB的接口以从Excel文件上传数据的最佳实践或想法我应该使用一种机制来允许加载所有记录并标记错误或应该我使用一种机制,在发生错误时停止加载.
我从来没有必要处理这种类型的要求,所以任何帮助都是超级的!
谢谢