Как получить XElement с потомками xml в SQL Server - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужна помощь для переноса моих XML-элементов с помощью XElement в SQL Server.Когда я запускаю код, MessageBox.Show(element.ToString(), "element.value"); правильно отображает <FIELD fieldName="ID">1234567</FIELD> и <FIELD fieldName="DateTime">05/02/2018 09:00:28</FIELD> в MessageBox.Могу ли я теперь использовать это для загрузки на свой tblMain в SQL Server?

По сути, это строка, сохраненная в качестве ввода из тела MSG в Outlook.Это тело сообщения содержит весь текст в виде XML в теле в виде простого текста.

Я загружаю строковый ввод как документ xml в XmlDocument.

С помощью XElement я затем анализирую этот ввод как xml,Я создаю переменную xitems с xml Descendants as («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

1 Ответ

0 голосов
/ 26 февраля 2019

Этот код 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 в качестве передаваемого аргумента.Затем просто выполните этот sp в вашем коде c #.

...