【问题标题】:Generating a Crystal Report document with NHibernate使用 NHibernate 生成 Crystal Report 文档
【发布时间】:2012-11-09 03:34:54
【问题描述】:

大家晚上好。

我正在 C#.Net 上使用 MVVM、Fluent NHibernate、WPF 开发应用程序,我们需要生成一些窗口的报告。我需要使用 Crystal Reports 工具创建报表。 AFAIK,Crystal Reports 只生成带有数据集的报告。在简单的应用程序中,我只能生成一个数据集,构建报告并使其运行。但是我怎么做才能使 NHibernate 理解,或者如何使它工作,使用 NHibernate 传递数据,而不是创建一个 DataSet 并使这个报告直接访问数据库?简而言之:我想使用通过 NHibernate 获得的所有数据来填充报告。

欢迎任何帮助!!!

最好的问候,

古斯塔沃

【问题讨论】:

    标签: c# crystal-reports fluent-nhibernate dataset


    【解决方案1】:

    http://ayende.com/blog/2376/converting-an-object-collection-to-a-dataset

    http://abombss.com/blog/2007/05/09/nhibernate-to-dataset/

    您的问题不是新问题。基本上,通常的解决方案是从 NHibernate 获取信息作为域对象的集合,然后使用这些对象的属性手动构建 DataTable。

    您还可以在 NHibernate 上添加一点香草 ADO。 NHibernate ITransactions 有一个 Enlist() 方法,它基本上允许您在 NHibernate 实现的内部将一个普通的 ADO DbCommand 关联到 ADO DbTransaction 方法,并像不使用 NHibernate 时一样执行它,以获得结果ADO.NET 格式。这是我在 Repository 实现中放入的内容,允许我按名称调用旧版存储过程:

        public IDataReader ExecuteReaderStoredProcedure(string procName, IUnitOfWork uow, IEnumerable<KeyValuePair<string, object>> parameters)
        {
            var command = Sessions[uow].Connection.CreateCommand();
    
            command.CommandText = procName;
            command.CommandType = CommandType.StoredProcedure;
            foreach (var param in parameters)
            {
                var parameter = command.CreateParameter();
                parameter.ParameterName = param.Key;
                parameter.Value = param.Value;
                command.Parameters.Add(parameter);
            }
    
            Sessions[uow].Transaction.Enlist(command);
            return command.ExecuteReader();
        }
    

    然后可以使用 DataReader 来填充 DataTable/DataSet。

    一些笔记;您看到的 IUnitOfWork 对象是链接到 Session 及其 Transaction 的令牌,用于控制它们的范围和生命周期;您可以修改它以使用您拥有的任何会话处理机制(包括从 SessionFactory 仅为此命令创建一个新会话,如果您选择)。你也可以传入“裸”的 SQL 字符串来执行;我通常会避免这种情况(事实上,实际实现中存储过程的名称是在特定静态类型的常量实例后面抽象出来的,类似于枚举)。

    【讨论】:

    • 我采用了不同的方法,但您的解释完全帮助了我,我明白如何让它发挥作用。数据现在正在发送到报告中。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多