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

时间:2019-02-25 17:44:07

标签: c# sql-server xml xmldocument xelement

我需要帮助才能使用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。我使用xml后代为(“ FIELD”)创建一个变量xitems,在其中运行一个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

1 个答案:

答案 0 :(得分: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。