【问题标题】:Empty report when using VS2008 report wizard and stored procedure使用VS2008报表向导和存储过程时的空报表
【发布时间】:2009-07-15 22:17:48
【问题描述】:

我正在使用 VS2008,编写一个 C# .NET 应用程序。我有一个 SQL Server 2005 数据库服务器,其数据库包含多个存储过程。我想在报告中显示存储过程数据。

因此,作为测试,我创建了一个基于“报告 -> 报告应用程序”项目类型的全新 VS2008 C# 项目。

我完成了向导,连接到数据库并从我想要使用的存储过程创建数据集。我告诉报告向导创建一个表格报告,并没有费心对列进行分组。

当我运行应用程序时,报表查看器的顶部出现了“报表 1”,但没有其他内容。只有一页。

如果我按照完全相同的方法创建一个全新的应用程序,但这次从我的数据库中选择一个视图或一个表,我会得到一个包含数据的多页报告,正如您所期望的那样。

那么,为什么报告系统不能使用存储过程,但可以正常使用表或视图呢?如果我在 SQL Management Studio 中执行存储过程,它就可以工作,并且它不需要任何参数。

【问题讨论】:

    标签: c# visual-studio-2008 sql-server-2005 stored-procedures reporting


    【解决方案1】:

    我没有使用向导解决了这个问题。

    1. 创建一个新的 WinForms 应用程序
    2. 通过右键单击解决方案资源管理器中的解决方案手动添加数据集
    3. 通过在解决方案资源管理器中双击 DataSet xsd 文件,然后右键单击空白区域并选择“Add-Table Adapter...”来手动添加 TableAdapter
    4. 连接到数据库
    5. 选择“使用现有存储过程”
    6. 分配所需的存储过程并完成向导
    7. 手动向解决方案添加报告
    8. 双击它,然后转到“数据->显示数据源”
    9. 将必填字段拖到报表上
    10. 将 Microsoft.Reporting.WinForms.ReportViewer 放到主窗体上
    11. 使用弹出的智能任务三角形关联所需的报告

    如果您想创建表格报告等,可以使用 reportviewer 控件上智能任务项下的报告向导,而不是步骤 8 和 9。

    【讨论】:

      【解决方案2】:

      我记得不久前使用 VS 2003(Crystal Reports)和 SQL Server 2000 时遇到问题,其中报表设计者无法确定存储过程返回的字段,结果生成了一个空白报表。在这种情况下,原因是存储过程从 SP 中定义的表变量中选择了结果。

      你检查过是否是这种情况吗?

      我可能已经把事情复杂化了,也许原因更直接,但是当我看到你的帖子时,我立刻想到了这种情况。

      当时我的问题的解决方案是创建一种“包装器”SP,并在表值函数中执行所有计算。然后 SP 从此函数中选择数据 (SELECT a, b, c FROM dbo.MyFunc(@param)),这使报表设计器能够检索字段列表。我需要 SP,因为设计器不支持参数化 SELECT 查询。不过,这种解决方法是在一个小型应用程序中实现的,我不确定这种方法如何或是否会影响更大规模的性能。

      【讨论】:

      • 向导知道存储过程中应该包含哪些字段,因为它会将它们放在我的报告模板中。另外,如果我在 VS2008 的侧面板中展开数据集,我可以看到其中的实时数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2014-06-22
      • 2010-12-19
      • 2018-01-24
      • 2011-04-18
      相关资源
      最近更新 更多