我是一名有用的助手,我可以为您翻译文本。
我们可以看到,尽管在查询中传递了
问题是:为什么
我有一个关于从C#代码将xml数据类型传递到查询的问题。
首先,这是SQL Server上的一个表:
CREATE TABLE [dbo].[XmlTable](
[id] [int] IDENTITY(1,1) NOT NULL,
[dat] [xml] NOT NULL
)
其次,我有一个使用C#编写的应用程序。我从应用程序向XmlTable
插入行。
以下是代码:
XDocument doc = new XDocument(new XElement("root",
new XElement("abc", "123"),
new XElement("cba", "321")));
var reader = new XmlTextReader(new StringReader(doc.ToString()));
var xml = new SqlXml(reader);
using (var connection = new SqlConnection(_connectionString))
{
using (var command = new SqlCommand("insert into XmlTable (dat) values(@data)", connection))
{
command.Parameters.Add(new SqlParameter("@data", SqlDbType.Xml){Value = xml});
connection.Open();
command.ExecuteNonQuery();
}
}
一切都很顺利,行已插入。但是如果我运行SQL Profiler并检查插入命令,我看到以下内容:
declare @p3 xml
set @p3=convert(xml,N'<root><abc>123</abc><cba>321</cba></root>')
exec sp_executesql N'insert into XmlTable (dat) values(@data)',N'@data xml',@data=@p3
我们可以看到,尽管在查询中传递了
SqlXml
类型,SqlClient
仍然执行了从字符串到 XML 的不必要转换。XML 解析器浪费了工作。问题是:为什么
SqlClient
这样做?我该如何让它避免额外的转换?