Предположим, что у меня есть таблица вроде этого:
CREATE TABLE [dbo].[TBL_XML]
(
[XmlFileID] [BIGINT] IDENTITY (1, 1) NOT NULL,
[FileName] [NVARCHAR](500) NULL,
[XmlData] [XML] NULL,
[DateCreated] [DATETIME] NOT NULL,
)
Метод, который я использую для заполнения таблицы, следующий:
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());
}
}
Но это не будет работать с очень большими XML-массивами, потому что весь файл загружен в память, и я получаю исключения OutOfMemory.
Каков наилучший способ вставки большого ( > 100 МБ) XML файла в столбец XMLData из приложения .net, запущенного на другой машине, чем сервер?
Массовая вставка не может быть и речи, так как SQL-сервер не будет иметь доступ к моему XML файлу.