【发布时间】:2017-11-03 06:04:11
【问题描述】:
我有 300 万行和 40 列的 CSV 文件。我想使用 SqlBulkCopy 概念将 CSV 数据移动到 SQL 服务器中。为此,我使用 CSV 阅读器将每一列和每一行移动到数据表中。使用 while 循环在数据表中插入行时,出现内存异常。 注意:438184(以下示例的 i 值)记录插入成功。之后我得到了内存异常。
SqlConnection con = new SqlConnection(connectionString);
con.Open();
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.CommandTimeout = 0;
SqlCmd.Connection = con;
SqlTransaction transaction = con.BeginTransaction();
var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader streamReader = new StreamReader(fileStream);
CsvReader reader = new CsvReader(streamReader);
DataTable table = new DataTable();
reader.ReadHeaderRecord();
foreach (var c in reader.HeaderRecord)
{
table.Columns.Add(c);
}
table.Rows.Clear();
int i = 0;
while (reader.HasMoreRecords)
{
DataRecord record = reader.ReadDataRecord();
table.Rows.Add(record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7], record[8], record[9], record[10], record[11], record[12], record[13], record[14], record[15], record[16], record[17], record[18], record[19], record[20], record[21], record[22], record[23], record[24], record[25], record[26], record[27], record[28], record[29], record[30], record[31], record[32], record[33], record[34], record[35], record[36], record[37], record[38], record[39]);
i++;
}
SqlBulkCopy copy = new SqlBulkCopy(con, SqlBulkCopyOptions.KeepIdentity, transaction);
copy.DestinationTableName = "SampleCSV";
copy.WriteToServer(table);
transaction.Commit();
con.Close();
谁能建议我如何解决这个问题?
【问题讨论】:
-
分块做...
标签: c# csv datatable sqlbulkcopy