所以,我正在研究一个数据库,我将把它作为一个支持数据库添加到我未来的项目中,但我遇到了一些问题,特别是日志.
数据库基本上每月需要更新一次.必须清除主表,然后重新填充CSV文件.问题是Sql Server会为它生成一个MEGA大的日志.我成功填写了一次,但想通过清洗然后重新填充它来测试整个过程.
那是我收到日志文件填满的错误.它从88MB(通过维护计划收缩后)跳到248MB,然后完全停止该过程并且永远不会完成.
我把它的增长限制在256MB,增加了16MB,这就是它失败的原因,但实际上我根本不需要它来记录任何东西.有没有办法完全绕过对数据库运行的任何查询的日志记录?
感谢提前回复!
编辑:根据@ mattmc3的建议我已经为整个过程实现了SqlBulkCopy.它工作令人惊讶,除了我的循环以某种方式崩溃在最后剩下的需要插入的块上.我不太确定我哪里出错了,我甚至不知道这是不是一个合适的循环,所以我很感激它的一些帮助.
我知道它是最后一个GetDataTable或SetSqlBulkCopy调用的问题.我正在尝试插入788189行,788000进入,其余189个崩溃...
string[] Rows;
using (StreamReader Reader = new StreamReader("C:/?.csv")) {
Rows = Reader.ReadToEnd().TrimEnd().Split(new char[1] {
'\n'
}, StringSplitOptions.RemoveEmptyEntries);
};
int RowsInserted = 0;
using (SqlConnection Connection = new SqlConnection("")) {
Connection.Open();
DataTable Table = null;
while ((RowsInserted < Rows.Length) && ((Rows.Length - RowsInserted) >= 1000)) {
Table = GetDataTable(Rows.Skip(RowsInserted).Take(1000).ToArray());
SetSqlBulkCopy(Table, Connection);
RowsInserted += 1000;
};
Table = GetDataTable(Rows.Skip(RowsInserted).ToArray());
SetSqlBulkCopy(Table, Connection);
Connection.Close();
};
static DataTable GetDataTable(
string[] Rows) {
using (DataTable Table …Run Code Online (Sandbox Code Playgroud)