正如它在问题中所说,给定一个大文本文件,如何将其内容放入sql server中的nvarchar(max)列而不将整个文件内容加载到内存中(用于构建动态sql语句或作为SP参数) )?
到目前为止,我最好的解决方案是插入一个空值的行,然后在循环运行中每次在事务中更新附加数据块.除了将文件复制到数据库服务器并使用BCP之外,还有更好的方法吗?流式传输数据的一些方法?
从.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)