我有以下方法:
public XmlElement FullSetXML(Guid ReviewUID)
{
using (ISession session = sessionManager.OpenSession())
{
IQuery query = session.CreateSQLQuery("exec rcs.ReviewFullSetXML ?");
query.SetGuid(0, ReviewUID);
return (XmlElement)query.UniqueResult();
}
}
存储过程返回XML,但它在此处作为字符串传递。结果是我收到以下错误:
Unable to cast object of type 'System.String' to type 'System.Xml.XmlElement'
任何人都可以告诉我我在这里缺少什么来让它作为XMLElement返回?
答案 0 :(得分:0)
如果你的存储过程返回一个xml-string,这样的东西会有所帮助:
public XmlDocument FullSetXML(Guid ReviewUID)
{
using (ISession session = sessionManager.OpenSession())
{
IQuery query = session.CreateSQLQuery("exec rcs.ReviewFullSetXML ?");
query.SetGuid(0, ReviewUID);
var xmlString = query.UniqueResult().ToString();
var xmlDoc = XmlDocument();
doc.LoadXml(xmlString);
return doc;
}
}
否则,如果您需要加载SQL Server XML数据类型,请查看here
在这种情况下,您必须使用SqlCommand
和SqlDatareader
而不使用NHibernate对象:只需从会话中获取连接引用。连接(您必须执行转换为SqlConnection
)。
如果你需要映射一个字段(顺便说一下你似乎不是这样),看看here。
如果您可以在" SqlQuery"中使用自定义IUserType
,我从未尝试过。使用UniqueResult<..>()
:这可能值得一试......