关于将 XFrCrtion 保存到 SQL Server XML 列
本文关键字:SQL Server XML 保存 XFrCrtion | 更新日期: 2023-09-27 18:34:51
这是我的XML文件:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mfisoft.ru/soap" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:selectRowsetResponse>
<result SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">report_id</key>
<value xsi:type="xsd:string">246</value>
</item>
</item>
</result>
</ns1:selectRowsetResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这是我在SQL Server中的表
CREATE TABLE [dbo].[HowToSaveXML](
[ID] [int] NOT NULL,
[XMLcontent] [xml] NOT NULL
)
当我在SQL Server Management Studio中编写这样的SQL命令时
insert into HowToSaveXML values (5,'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mfisoft.ru/soap" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:selectRowsetResponse>
<result SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">report_id</key>
<value xsi:type="xsd:string">246</value>
</item>
</item>
</result>
</ns1:selectRowsetResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>')
它工作正常并成功将一条记录添加到表 HowToSaveXML
但是当我使用 C# 代码做同样的事情时,像这样:
XDocument xd = XDocument.Load(@"D:'temp'0919'sDocumentToXML.xml");
sqlCmdUpdate = new SqlCommand("insert into HowToSaveXML values ( 5 , " + xd.ToString(), conn);
sqlCmdUpdate.CommandTimeout = 200;
if (conn.State == ConnectionState.Closed)
conn.Open();
try
{
sqlCmdUpdate.ExecuteNonQuery();
}
catch (Exception aep)
{
}
其中sDocumentToXML.xml包含与上述文件相同的内容,但它抛出异常:
Incorrect syntax near '<'.
The label 'xmlns' has already been declared. Label names must be unique within a query batch or stored procedure
似乎系统不允许重复节点,但是我已经直接在管理工作室中使用插入命令成功插入了相同的XML,那么原因是什么,如何使用C#代码来做同样的事情? 谢谢。
另外:如果我像这样更改C#代码
sqlCmdUpdate = new SqlCommand("insert into HowToSaveXML values ( 5 , '" + xd.ToString() + "'", conn);
它还会引发异常。
要将字符串值发送到 SQL,您始终需要使用参数,而不是将查询构建为字符串。
sqlCmdUpdate = new SqlCommand("insert into HowToSaveXML values (5 , @xml)", conn);
sqlCmdUpdate.Parameters.AddWithValue("@xml", xd.ToString());
文档:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx