这是我的参数定义:
var param = new SqlParameter
{
ParameterName = "@param",
SqlDbType = SqlDbType.Xml,
Direction = ParameterDirection.Output,
Size = int.MaxValue
};
command.Parameters.Add(param);
然后我这样做:
command.ExecuteNonQuery();
最后:
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
return serializer.Deserialize(
new MemoryStream(Encoding.UTF8.GetBytes(param.Value.ToString())))
as MyClass;
我真的需要转换为字符串然后转换为字节数组吗?
答案 0 :(得分:4)
使用Parameter.SqlValue
,将返回SqlXml
个实例,您可以使用CreateReader
来获取XML阅读器。然后使用XmlSerializer.Deserialize(XmlReader)
覆盖。
如果XML很大,您应该考虑使用CommandBehavior.SequentialAccess
。
答案 1 :(得分:0)
您也可以这样做:
cnn = new SqlConnection();
cnn.ConnectionString = "xxxxxxxxxxxxxxxxx";
cnn.Open();
string selectQry = "SELECT [Xml] FROM [Table1] WHERE [PK_ID] = @ID";
cmd = new SqlCommand(selectQry, cnn);
cmd.Parameters.AddWithValue("@ID", ID);
XmlReader reader = cmd.ExecuteXmlReader();
if (reader.Read())
xdoc.Load(reader);