过程
- 我正在编写一个 C# 应用程序,它需要从数据库 A 中的 SQL 表中检索 400 万条记录(ID)。
- 然后我需要使用每个 ID 从数据库 B 中的另一个 SQL 表中选择一行记录。
- 一旦我有了这一行,我就需要更新数据库 C 中的另一个 SQL 表
问题
在步骤 1 中检索和存储数据的最有效方法是什么?一个。我应该将其加载到列表字符串中吗?湾。你建议最初做批处理吗?
实现步骤 2 和 3 的最有效方法是什么
要检索您将要使用的 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来获得所需的一行。SqlCommand
UPDATE
编写上述内容的另一种方式,它更安全一点,是使用以下using
语句:
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var id = reader.GetInt32(0);
// an so on
}
}
这将消除对:
reader.Close();
reader.Dispose();
因此,SqlConnection
如果您愿意,您也可以发布它。
SQLBulkCopy 类可能会有所帮助。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx