OleDbDataAdapter更新问题

时间:2009-02-27 09:12:36

标签: c# oledb

我有一个包含大量行(超过一亿)的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");

这会有用吗?这是一种有效/推荐的方式吗?应用程序快速且仅使用必要的资源非常重要。有没有更好的方法呢?

感谢您的投入!

2 个答案:

答案 0 :(得分:1)

如果您不需要数据,可以将select命令更改为

SELECT * FROM Table_Name WHERE 1=2

然后你不会得到任何行

答案 1 :(得分:1)

IMO,最好的方法是:

  1. 使用OleDbDataAdapter.FillSchema(data_set_name, SchemaType.Source)方法创建具有从数据源映射的结构的DataTable。你基本上试图通过在Select语句中拉一行来做同样的事情。在这种情况下,您的Select语句可以保持为“select * from table_name”。我相信您现在不需要调用OleDbDataAdapter.Fill方法。

  2. 不要使用CommandBuilder,而是自己创建InsertCommand语句。