2

我想我要疯了:这是一个相当简单的场景,应该记录在案,但是......不!

这是我的存储过程声明:

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 方法要求所有可变长度参数具有显式设置的非零大小。

谢谢你的帮助,斯特凡

4

1 回答 1

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

希望这会有所帮助

于 2012-12-10T14:02:25.993 回答