Как передать XML из C # в хранимую процедуру в SQL Server 2008?

Я хочу передать xml-документ в хранимую процедуру сервера sql, например:

CREATE PROCEDURE BookDetails_Insert (@xml xml)

Я хочу сравнить данные некоторых полей с данными других таблиц и если это совпадает, записи должны быть вставлены в таблицу.

Требования:

  1. Как передать XML в хранимую процедуру? Я пробовал это, но не работает: [Работает]

     command.Parameters.Add (
     новый SqlParameter ("@ xml", SqlDbType.Xml)
     {
     Значение = новый SqlXml (новый XmlTextReader (xmlToSave.InnerXml,
     XmlNodeType.Document, нуль))
     });
    
  2. Как получить доступ к данным XML в хранимой процедуре?

Редактировать: [Работает]

 String sql = "BookDetails_Insert";
        XmlDocument xmlToSave = new XmlDocument();
        xmlToSave.Load("C:\\Documents and Settings\\Desktop\\XML_Report\\Books_1.xml");

        SqlConnection sqlCon = new SqlConnection("...");
        using (DbCommand command = sqlCon.CreateCommand())
        {
            **command.CommandType = CommandType.StoredProcedure;**
            command.CommandText = sql;
            command.Parameters.Add(
              new SqlParameter("@xml", SqlDbType.Xml)
              {
                  Value = new SqlXml(new XmlTextReader(xmlToSave.InnerXml
                             , XmlNodeType.Document, null))
              });

            sqlCon.Open();
            DbTransaction trans = sqlCon.BeginTransaction();
            command.Transaction = trans;

            try
            {
                command.ExecuteNonQuery();
                trans.Commit();
                sqlCon.Close();
            }
            catch (Exception)
            {
                trans.Rollback();
                sqlCon.Close();
                throw;
            }

Редактировать 2 : Как создать запрос выбора для выбора страниц, описание на основе некоторых условий.

  <booksdetail> <isn_13>700001048</isbn_13> <isn_10>01048B</isbn_10>       
    <Image_URL>http://www.landt.com/Books/large/00/7010000048.jpg</Image_URL>   
    <title>QUICK AND FLUPKE</title> <Description> PRANKS AND JOKES QUICK AND FLUPKE </Description> </booksdetail> 
25
задан Geeth 31 August 2010 в 06:45
поделиться

3 ответа

Для второй части вашего вопроса см. мой ответ на Хранимая процедура: передать XML в качестве аргумента и INSERT (пары ключ/значение) для примера использования XML в хранимой процедуре.

РЕДАКТИРОВАТЬ: приведенный ниже пример кода основан на конкретном примере, приведенном в комментариях.

declare @MyXML xml

set @MyXML = '<booksdetail> 
                  <isbn_13>700001048</isbn_13> 
                  <isbn_10>01048B</isbn_10> 
                  <Image_URL>http://www.landt.com/Books/large/00/70100048.jpg</Image_URL> 
                  <title>QUICK AND FLUPKE</title> 
                  <Description> PRANKS AND JOKES QUICK AND FLUPKE - CATASTROPHE QUICK AND FLUPKE </Description> 
              </booksdetail>'

select Book.detail.value('(isbn_13/text())[1]','varchar(100)') as isbn_13, 
       Book.detail.value('(isbn_10/text())[1]','varchar(100)') as isbn_10, 
       Book.detail.value('(Image_URL/text())[1]','varchar(100)') as Image_URL, 
       Book.detail.value('(title/text())[1]','varchar(100)') as title, 
       Book.detail.value('(Description/text())[1]','varchar(100)') as Description
    from @MyXML.nodes('/booksdetail') as Book(detail)     
11
ответ дан 28 November 2019 в 21:58
поделиться

Как указано в http://support.microsoft.com/kb/555266, данные xml необходимо передавать как NText.

Вы можете запросить XML-переменную следующим образом:

DECLARE @PeopleXml XML
    SET @PeopleXml = '<People>
    <Person>
    <Name>James</Name>
    <Age>28</Age>
    </Person>
    <Person>
    <Name>Jane</Name>
    <Age>24</Age>
    </Person>
    </People>'
--  put [1] at the end to ensure the path expression returns a singleton.
SELECT p.c.value('Person[1]/Name[1]', 'varchar(50)')
FROM @PeopleXml.nodes('People') p(c) -- table and column aliases
2
ответ дан 28 November 2019 в 21:58
поделиться

Вы будете использовать xPath и XQuery в основном для запроса и изменения данных XML.

Вот хорошая отправная точка http://msdn.microsoft.com/en-us/library/ms190798.aspx.

Я не могу сказать что-то более конкретное, потому что ваш вопрос очень расплывчатый. Пожалуйста, задавайте конкретные вопросы о том, как что-то сделать, если вам нужна помощь в использовании XPath и XQuery.

0
ответ дан 28 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: