小编Bog*_*anB的帖子

将大型xml文件插入xml列的最佳方法(在远程SQL Server上)

假设我有一个这样的表:

CREATE TABLE [dbo].[TBL_XML]
(
   [XmlFileID]       [BIGINT] IDENTITY (1, 1) NOT NULL,
   [FileName]        [NVARCHAR](500) NULL,   
   [XmlData]         [XML] NULL,
   [DateCreated]     [DATETIME] NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)

我目前用来填充表格的方法是这样的:

using (SqlCommand cmd = new SqlCommand())
{
    cmd.CommandText = @"INSERT INTO [dbo].[TBL_XML] 
                                    ( [XmlData] , 
                                    [FileName] , 
                                    [DateCreated]
                                    ) 
                        VALUES (@XMLData, @FileName, GETDATE())";

    using (var xmlReader = new XmlTextReader(new FileStream(item.XmlFileName, FileMode.Open)))
    {
        cmd.Parameters.Add("@FileName", SqlDbType.NVarChar, 500).Value = System.IO.Path.GetFileName(item.XmlFileName);
        cmd.Parameters.Add(
        new SqlParameter("@XMLData", SqlDbType.Xml)
        {
            Value = new SqlXml(xmlReader)
        });

        SetConnectionParameters(cmd);

        cmd.ExecuteScalar());
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于非常大的XML,因为整个文件都加载到内存中,我得到了OutOfMemory异常.

从运行在与服务器不同的机器上的.net应用程序中将大(> 100MB)XML文件插入XMLData列的最佳方法是什么?

批量插入是不可能的,因为SQL服务器将无法访问我的XML文件.

c# xml sql-server insert stream

15
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

insert ×1

sql-server ×1

stream ×1

xml ×1