【发布时间】:2016-06-23 06:55:49
【问题描述】:
我的 CSV 文件大小为 4gb,我需要将其导入 SQL Server。 我认为它有超过 2000 万行。如果有人能在不到一个小时的时间内为我提供一种方法,我将非常感激。
我已经在做的事情:
using (FileStream filestream = new FileStream(path, FileMode.Open, FileAccess.Read)) {
using (StreamReader reader = new StreamReader(filestream, Encoding.UTF8)) {
string line = "";
bool isHeader = true;
int counter = 0;
while ((line = reader.ReadLine()) != null) {
if (isHeader) {
model.Columns = line.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
isHeader = false;
continue;
} else {
if (Settings.Default.RonudSet != 0) {
LoadInDB(indicator,RoundDecimals(line));
} else {
LoadInDB(indicator, line);
}
}
cmd.ExecuteNonQuery();
counter++;
}
}
model.RowCount = counter;
model.ColumnsCount = model.Columns.Length;
}
}
return model;
}
我的数据库上传方式:
public void LoadInDB(char indicator, string key) {
using (SqlConnection conn = new SqlConnection(Settings.Default.DBconnection)) {
conn.Open();
try {
SqlCommand cmd = new SqlCommand("dbo.LipperFilesTestingInsertFileRowKey", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@FileRowKey", SqlDbType.NVarChar, 100));
cmd.Parameters["@FileRowKey"].Value = key;
cmd.Parameters.Add(new SqlParameter("@targetTableIndicator", SqlDbType.NVarChar, 100));
cmd.Parameters["@targetTableIndicator"].Value = indicator;
cmd.ExecuteNonQuery();
} catch (SqlException sqlExc) {
MyLog.WriteToLog(sqlExc.Message,MyLog.Messages.Error);
}
}
}
【问题讨论】:
标签: c# sql-server csv upload insert