使用VS2008报告向导和存储过程时清空报告

时间:2009-07-15 22:17:48

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我通过不使用向导来解决这个问题。

  1. 创建一个新的WinForms应用
  2. 右键单击解决方案资源管理器
  3. 中的解决方案,手动添加DataSet
  4. 通过双击解决方案资源管理器中的DataSet xsd文件手动添加TableAdapter,然后右键单击空白区域并选择“添加表适配器...”
  5. 连接到数据库
  6. 选择“使用现有存储过程”
  7. 分配所需的存储过程并完成向导
  8. 手动将报告添加到解决方案
  9. 双击它,然后转到“数据 - >显示数据源”
  10. 将必填字段拖到报告
  11. 将Microsoft.Reporting.WinForms.ReportViewer放到主窗体上
  12. 使用弹出式智能任务三角形关联所需的报告
  13. 您可以使用reportviewer控件上智能任务项下提供的报表向导,而不是步骤8& 9如果要创建表格报告等

答案 1 :(得分:0)

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

您是否检查过是否是这种情况?

我可能已经把事情弄得太复杂了,也许原因更直接,但是当我看到你的帖子时,这就是我想到的情景。

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