【发布时间】:2014-04-07 12:26:11
【问题描述】:
我必须将一些数据库恢复到远程 SQL Server。问题是它们最多可以达到几 GB,这会在一次读取所有字节时导致“OutOfMemory”异常。在较小的数据库上,它可以正常工作..
现在我尝试在这里将数据库按顺序流式传输到 SQL Server:
using (System.Data.SqlClient.SqlCommand command = conn.CreateCommand())
{
command.CommandText = "INSERT INTO " + dbName + ".dbo.tempTable (blob) values (@data)";
command.CommandTimeout = 900;
SqlParameter dataParam = new SqlParameter("@data", SqlDbType.VarBinary);
command.Parameters.Add(dataParam);
SqlParameter offsetParam = new SqlParameter("@offset", SqlDbType.BigInt);
command.Parameters.Add(offsetParam);
SqlParameter lengthParam = new SqlParameter("@len", SqlDbType.BigInt);
command.Parameters.Add(lengthParam);
using (FileStream fs = new FileStream(fileSource, FileMode.Open, FileAccess.Read, FileShare.Read))
{
byte[] buffer = new byte[8192];
int read = 0;
int offset = 0;
while ((read = fs.Read(buffer, 0, buffer.Length)) > 0)
{
dataParam.Value = buffer;
offsetParam.Value = offset;
lengthParam.Value = read;
command.ExecuteNonQuery();
if (offset == 0)
{
command.CommandText = "UPDATE " + dbName + ".dbo.tempTable SET blob.WRITE(@data, @offset, @len)";
}
offset += read;
}
}
}
现在我的问题:
一个 500mb 的数据库需要超过 15 分钟,然后它停止工作并出现此异常:
System.Data.Common.DbException:超时。在操作完成之前超时时间已过或服务器没有响应。
提前致谢,
放松
【问题讨论】:
标签: c# sql sql-server sequential varbinary