我想我会在这个问题上疯狂:这是一个相当简单的场景,应该记录在案,但是......不!
这是我的存储过程声明:
CREATE PROCEDURE [dbo].[spImport]
(
@xmlDocument AS XML
)
AS
---
GO
这是我的映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="XXX"
namespace="XXX.Entities">
<sql-query name="spImport">
<![CDATA[EXEC [dbo].[spImport] @xmlDocument = :xmlDocument]]>
</sql-query>
</hibernate-mapping>
这是调用方法:
session.GetNamedQuery("spImport").SetParameter("xmlDocument", document, NHibernateUtil.XmlDoc).ExecuteUpdate();
现在,我收到了以下错误:
准备EXEC [dbo]。[spImport] @xmlDocument = @ p0发生错误InnerException:SqlCommand.Prepare方法要求所有变量长度参数都有明确设置 非零尺寸。
感谢您的帮助, 斯蒂芬
答案 0 :(得分:1)
从未花时间真正解决XmlType长度问题。会对“干净”的答案感兴趣。无论如何,这是我的解决方法:
我假设你使用的是NHibernateUtil.XmlDoc:IUserType。
作为SqlTypes实现,我有:
public SqlType[] SqlTypes
{
get
{
return new SqlType[] { new SqlXmlType() };
}
}
其中SqlXmlType为:
public class SqlXmlType : SqlType
{
public SqlXmlType() : base(System.Data.DbType.Xml,5000000)
{
}
}
允许我处理最多5个Mo XmlDocs
希望这会有所帮助