如何从C#传递XML在SQL Server 2008的存储过程? [英] How to pass XML from C# to a stored procedure in SQL Server 2008?
问题描述
我要到XML文档传递到SQL Server存储过程像这样的:
CREATE PROCEDURE BookDetails_Insert(@xml XML)
我想比较与其它表数据的一些字段的数据,如果它是匹配的记录有插入到表
要求:
-
我如何通过XML存储过程?我想这一点,但它不工作: [工作]
command.Parameters.Add(
新的SqlParameter(@ XML,SqlDbType.Xml)
{
值=新SQLXML(新的XmlTextReader(xmlToSave.InnerXml,
XmlNodeType.Document,NULL))
}); -
我如何访问存储过程中的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:
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)) });
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屋!