0

我有一个包含很多行(超过一亿)的 DataTable,并且正在编写一个需要插入该表的应用程序。

我将使用 OleDbDataAdapter 来完成这项工作,我很困惑最好的方法是什么。我只需要插入到这个巨大的表中,但是我不想将插入语句硬编码到应用程序中。

我想我可以用

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 命令会非常快,并且我将拥有所有未来插入语句所需的数据。我可以将行添加到数据表,然后调用

adapter.Update(data_set_name, "Table_name");

这行得通吗?这是一种有效/推荐的方法吗?应用程序快速且仅使用必要的资源非常重要。有没有更好的方法来做到这一点?

谢谢您的意见!

4

2 回答 2

1

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

SELECT * FROM Table_Name WHERE 1=2

然后你不会得到任何行回来

于 2009-02-27T09:21:53.940 回答
1

IMO,最好的方法是:

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

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

于 2009-02-27T09:33:14.847 回答