如何将带有xml后代的XElement导入SQL Server

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

我需要帮助才能将使用XElement的XML元素导入SQL Server。当我运行代码时,MessageBox.Show(element.ToString(), "element.value");正确地在MessageBox中显示<FIELD fieldName="ID">1234567</FIELD><FIELD fieldName="DateTime">05/02/2018 09:00:28</FIELD>。我现在可以使用它来上传到SQL Server中的tblMain吗?

基本上它是一个字符串,保存为outlook中.msg正文的输入。这个msg正文将所有文本作为纯文本格式的正文中的XML。

我将字符串输入作为xml文档加载到XmlDocument中。

使用XElement,然后将此输入解析为xml。我创建了一个变量xitems,其中xml Descendants为(“FIELD”),其中我将一个foreach循环作为xitems中的变量元素运行。输出现在显示在MessageBox中。

请问,我正在寻找的是详细的帮助,如何将这个进入SQL Server到一个名为tblMain的表,为简单起见它有两列ID和DateTime?

代码:

for (int i = 1; i < publicFolder.Items.Count; i++)
{                                                                        
    item = (PostItem)publicFolder.Items[i];
    if (item != null)
    {
        //MessageBox.Show(item.Body, "Body");

        //save the msg body into the string 
        string input = item.Body;


        //load the string input as xml document
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(input);

        XElement xml = XElement.Parse(input);


        var xitems = xml.Descendants("FIELD");

        foreach (var element in xitems)
        {
            MessageBox.Show(element.ToString(), "element.value");

        }


        ////Create new instance of SQL Connection 
        //SqlConnection conn = new SqlConnection();

xml文件是:https://imgur.com/a/epCLd22

c# sql-server xml xmldocument xelement
1个回答
0
投票

此SQL代码可以指导您如何解决您的任务:

DECLARE @ColNamesCommaSeparated NVARCHAR(MAX)
DECLARE @ValuesCommaSeparated NVARCHAR(MAX)

DECLARE @xml XML
SET @xml = '
<ROOT>
<FIELD fieldName="ID">1234567</FIELD>
<FIELD fieldName="DateTime">05/02/2018 09:00:28</FIELD>
</ROOT>
'

;WITH Result AS
(
    SELECT
     T.n.value('@fieldName','VARCHAR(100)') AS ColName,
     T.n.value('.','VARCHAR(100)') AS Val
    FROM @xml.nodes('/ROOT/*') T(n)
)

SELECT @ColNamesCommaSeparated = 
    STUFF(
          (SELECT ', ' + ColName
          FROM Result
          FOR XML PATH ('')), 1, 1, ''),
    @ValuesCommaSeparated =
    STUFF(
          (SELECT ', ' + '''' + Val + ''''
          FROM Result
          FOR XML PATH ('')), 1, 1, '')

DECLARE @sqlCommand NVARCHAR(MAX)
SET @sqlCommand = 'INSERT INTO tblMain (' + @ColNamesCommaSeparated + ') VALUES (' + @ValuesCommaSeparated + ')'
EXEC(@sqlCommand)

因此,您可以创建一个接受xml作为传递参数的存储过程。然后在c#代码中执行此sp。

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