客户端使用我们的Web应用程序来解析数据库的XML文件。然后使用来自数据库的XML文件中的信息进行各种其他操作。我现在是流读取和流写入文件。当文件较小时,它们曾经被解析为字符串,然后插入到数据库记录中。问题是文件太大,以至于计算机没有足够的RAM来处理大的字符串,我该如何处理这个文件并仍然将它存储在数据库中?
using (var reader = new StreamReader(outputPath))
{
string line = string.Empty;
bool save = false;
using (var sWriter = new StreamWriter(inputPath))
{
while ((line = reader.ReadLine()) != null)
{
System.Diagnostics.Debug.WriteLine(line);
if (line.Contains("<SaveDataFromScout>"))
{
sWriter.WriteLine("<SaveDataFromScout>");
save = true;
continue;
}
else if (line.Contains("</SaveDataFromScout>"))
{
sWriter.WriteLine(line);
save = false;
}
if (save)
{
if (line.Contains("ELEMENT TEXT"))
line = line.Replace("ELEMENT TEXT", "ELEMENTTEXT");
sWriter.WriteLine(line);
}
}
}
}
//string workbookXML = System.IO.File.ReadAllText(outputPath);
transactionID = DAC.ExecuteScalar
(
db.ConnectionString,
"dbo.cwi_InsertTransaction",
new SqlParameter("@TransactionTypeID", transactionTypeID),
new SqlParameter("@UploadedFileName", fileDataLink),
//new SqlParameter("@UploadedFileXml", workbookXML),
new SqlParameter("@CurrentUserID", CurrentUser.UserID)
);
您是否看到注释掉的代码,它之前被转换为要解析为数据库的字符串?嗯,这可行,但它不适用于大约888MB的文件。
使用批量加载将文件直接加载到SQL Server,XML列类型中:
INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
BULK 'c:\SampleFolder\SampleData3.txt',
SINGLE_BLOB) AS x;