2

过程

  1. 我正在编写一个 C# 应用程序,它需要从数据库 A 中的 SQL 表中检索 400 万条记录(ID)。
  2. 然后我需要使用每个 ID 从数据库 B 中的另一个 SQL 表中选择一行记录。
  3. 一旦我有了这一行,我就需要更新数据库 C 中的另一个 SQL 表

问题

  1. 在步骤 1 中检索和存储数据的最有效方法是什么?一个。我应该将其加载到列表字符串中吗?湾。你建议最初做批处理吗?

  2. 实现步骤 2 和 3 的最有效方法是什么

4

2 回答 2

0

要检索您将要使用的 4M 记录SqlDataReader- 它一次只将一行数据加载到内存中。

var cn = new SqlConnection("some connection string");
var cmd = new SqlCommand("SELECT ID FROM SomeTable", cn);
var reader = cmd.ExecuteReader();

while (reader.Read())
{
    var id = reader.GetInt32(0);

    // an so on
}

reader.Close();
reader.Dispose();
cn.Close();

现在,为了处理二和三,我将利用 aDataTable作为您需要检索的行,然后利用 aSqlCommand在第三个数据库上。这意味着在内部reader.Read()您可以通过用 a 填充 aDataTable并针对语句SqlDataAdapter发出ExecNonQuery反对 a来获得所需的一行。SqlCommandUPDATE

编写上述内容的另一种方式,它更安全一点,是使用以下using语句:

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        var id = reader.GetInt32(0);

        // an so on
    }
}

这将消除对:

reader.Close();
reader.Dispose();

因此,SqlConnection如果您愿意,您也可以发布它。

于 2013-03-12T17:47:19.840 回答
0

SQLBulkCopy 类可能会有所帮助。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

于 2013-03-12T17:49:43.673 回答