我可以从ASP.net向SQL Server中插入一个大文本值,而不必将整个文件放在Web服务器的内存中吗?

pow*_*tte 7 c# sql-server

正如它在问题中所说,给定一个大文本文件,如何将其内容放入sql server中的nvarchar(max)列而不将整个文件内容加载到内存中(用于构建动态sql语句或作为SP参数) )?

到目前为止,我最好的解决方案是插入一个空值的行,然后在循环运行中每次在事务中更新附加数据块.除了将文件复制到数据库服务器并使用BCP之外,还有更好的方法吗?流式传输数据的一些方法?

Lor*_*ler 4

从.net4.5开始SqlParameters支持TextReader https://msdn.microsoft.com/en-us/library/hh556234(v=vs.110).aspx

using (SqlConnection conn = new SqlConnection(connection_string))
using (SqlCommand cmd = conn.CreateCommand())
using (FileStream file = File.OpenRead(@"C:\temp\bigtextfile.txt"))
{
    cmd.CommandText = "INSERT INTO RandomTable (TextBlob) VALUES (@text)";
    cmd.Parameters.Add("@text", System.Data.SqlDbType.NVarChar, -1).Value = file;
    conn.Open();
    cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)