我有一个包含大量行(超过一亿)的DataTable,我正在编写一个需要插入该表的应用程序。
我将使用OleDbDataAdapter来完成这项工作,我很困惑,这是最好的方法。我只需要插入这个庞大的表,但是我不想将insert语句硬编码到应用程序中。
我想我可以使用
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand("select * from table_name");
OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);
...
adapter.Fill(data_set_name, "Table_name");
但这实际上是糟糕,因为我不需要/想要数据并且内存使用会很糟糕。如果我能用TOP改变SelectCommand,那么我很有意思?它看起来像这样:
adapter.SelectCommand = new OleDbCommand("select TOP 1 * from table_name");
现在Fill命令非常快,我将拥有所有未来插入语句所需的数据。我可以在datatable中添加行,然后调用
adapter.Update(data_set_name, "Table_name");
这会有用吗?这是一种有效/推荐的方式吗?应用程序快速且仅使用必要的资源非常重要。有没有更好的方法呢?
感谢您的投入!
答案 0 :(得分:1)
如果您不需要数据,可以将select命令更改为
SELECT * FROM Table_Name WHERE 1=2
然后你不会得到任何行
答案 1 :(得分:1)
IMO,最好的方法是:
使用OleDbDataAdapter.FillSchema(data_set_name, SchemaType.Source)
方法创建具有从数据源映射的结构的DataTable。你基本上试图通过在Select语句中拉一行来做同样的事情。在这种情况下,您的Select语句可以保持为“select * from table_name
”。我相信您现在不需要调用OleDbDataAdapter.Fill
方法。
不要使用CommandBuilder
,而是自己创建InsertCommand
语句。