如何将非常大的文件存储到数据库记录中

问题描述 投票:0回答:1

客户端使用我们的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的文件。

c# asp.net sql-server xml stored-procedures
1个回答
1
投票

使用批量加载将文件直接加载到SQL Server,XML列类型中:

INSERT INTO T(XmlCol)  
SELECT * FROM OPENROWSET(  
   BULK 'c:\SampleFolder\SampleData3.txt',  
   SINGLE_BLOB) AS x;  

更多文档:https://docs.microsoft.com/en-us/sql/relational-databases/import-export/examples-of-bulk-import-and-export-of-xml-documents-sql-server?view=sql-server-2017

© www.soinside.com 2019 - 2024. All rights reserved.