如何从C#传递XML在SQL Server 2008的存储过程? [英] How to pass XML from C# to a stored procedure in SQL Server 2008?

查看:1051
本文介绍了如何从C#传递XML在SQL Server 2008的存储过程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要到XML文档传递到SQL Server存储过程像这样的:

  CREATE PROCEDURE BookDetails_Insert(@xml XML)

我想比较与其它表数据的一些字段的数据,如果它是匹配的记录有插入到表

要求:


  1. 我如何通过XML存储过程?我想这一点,但它不工作: [工作]

      command.Parameters.Add(
        新的SqlParameter(@ XML,SqlDbType.Xml)
        {
            值=新SQLXML(新的XmlTextReader(xmlToSave.InnerXml,
                               XmlNodeType.Document,NULL))
        });


  2. 我如何访问存储过程中的XML数据?


编辑: [工作]

 字符串SQL =BookDetails_Insert;
        XmlDocument的xmlToSave =新的XmlDocument();
        xmlToSave.Load(C:\\\\ Documents和Settings \\\\ \\\\桌面\\\\ XML_Report Books_1.xml);        SqlConnection的sqlCon =新的SqlConnection(...);
        使用(的DbCommand命令= sqlCon.CreateCommand())
        {
            ** command.CommandType = CommandType.StoredProcedure; **
            command.CommandText = SQL;
            command.Parameters.Add(
              新的SqlParameter(@ XML,SqlDbType.Xml)
              {
                  值=新SQLXML(新的XmlTextReader(xmlToSave.InnerXml
                             ,XmlNodeType.Document,NULL))
              });            sqlCon.Open();
            DbTransaction反式= sqlCon.BeginTransaction();
            command.Transaction =反;            尝试
            {
                command.ExecuteNonQuery();
                trans.Commit();
                sqlCon.Close();
            }
            赶上(例外)
            {
                trans.Rollback();
                sqlCon.Close();
                扔;
            }

编辑2 :如何创建基于某些条件选择查询选择页面,说明

 < booksdetail> < isn_13> 700001048< / isbn_13> < isn_10> 01048B< / isbn_10>
    &LT;&IMAGE_URL GT; HTTP://www.landt.com/Books/large/00/7010000048.jpg< / IMAGE_URL&GT;
    &LT;标题&GT;快速而FLUPKE&LT; /标题&GT; &LT;说明与GT;恶作剧和笑话快速并FLUPKE&LT; /说明&GT; &LT; / booksdetail&GT;


解决方案

对于你的问题的第2部分,请参阅我的回答<一个href=\"http://stackoverflow.com/questions/3557882/stored-procedure-pass-xml-as-an-argument-and-insert-key-value-pairs/3558102#3558102\">Stored程序:通过XML作为参数,并将(键/值对)对于如何在存储过程中使用XML的例子

修改:样品code以下是基于在评论中给出的具体例子

 宣布@MyXML XML设置@MyXML ='&LT; booksdetail&GT;
                  &LT; isbn_13&GT; 700001048&LT; / isbn_13&GT;
                  &LT; isbn_10&GT; 01048B&LT; / isbn_10&GT;
                  &LT;&IMAGE_URL GT; HTTP://www.landt.com/Books/large/00/70100048.jpg< / IMAGE_URL&GT;
                  &LT;标题&GT;快速而FLUPKE&LT; /标题&GT;
                  &LT;说明与GT;恶作剧和笑话快速并FLUPKE - 突变快速并FLUPKE&LT; /说明&GT;
              &LT; / booksdetail&GT;'选择Book.detail.value('(isbn_13 /文())[1]','VARCHAR(100))作为isbn_13,
       Book.detail.value('(isbn_10 /文())[1]','VARCHAR(100))作为isbn_10,
       Book.detail.value('(IMAGE_URL /文())[1]','VARCHAR(100))作为IMAGE_URL,
       Book.detail.value('(标题/文本())[1]','为varchar(100)')作为标题,
       Book.detail.value('(描述/文())[1]','为varchar(100)')的说明
    从@ MyXML.nodes('/ booksdetail')作为图书(详细)

I want to pass xml document to sql server stored procedure such as this:

CREATE PROCEDURE BookDetails_Insert (@xml xml)

I want compare some field data with other table data and if it is matching that records has to inserted in to the table.

Requirements:

  1. How do I pass XML to the stored procedure? I tried this, but it doesn’t work:[Working]

    command.Parameters.Add(
        new SqlParameter("@xml", SqlDbType.Xml)
        {
            Value = new SqlXml(new XmlTextReader(xmlToSave.InnerXml,
                               XmlNodeType.Document, null))
        });
    

  2. How do I access the XML data within the stored procedure?

Edit: [Working]

 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;
            }

Edit 2: How to create a select query to select pages, description based on some conditions.

  <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> 

解决方案

For part 2 of your question, see my answer to Stored procedure: pass XML as an argument and INSERT (key/value pairs) for an example of how to use XML within a stored procedure.

EDIT: Sample code below is based on the specific example given in the comments.

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)     

这篇关于如何从C#传递XML在SQL Server 2008的存储过程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆