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 XmlDoc を処理できるようにする

これが役立つことを願っています

于 2012-12-10T14:02:25.993 に答える