【问题标题】:How to display results from Stored Procedure WinForms如何显示存储过程 WinForms 的结果
【发布时间】:2013-08-19 14:34:45
【问题描述】:

我在 SQL Server 中有一个存储过程,它根据参数返回不同的结构。

换句话说,它可能会返回一个包含三个字段或 15 个字段的结果集,并且列名会有所不同。

如何在 WinForm 应用程序中显示这些结果?

我目前使用实体框架来访问数据,但显然这在这种情况下不起作用。

数据将是只读的,即无需编辑。只需要显示它。

我猜我需要跳过 EF,直接调用 SP,然后用自动列填充 DataGridView。

格雷格

【问题讨论】:

  • 这是一个糟糕的数据库设计——给定存储过程的结果集结构应该是稳定固定。让它根据输入参数改变它的形状使得它真的很难使用这个过程......我会先修复这个设计缺陷......
  • 如果你有SP,没必要用EF,直接用ADO.NET(SqlCommand之类的)直接调用存储过程即可。

标签: sql-server winforms stored-procedures ado.net


【解决方案1】:

由于您要检索动态数据结构,因此您也需要使网格列动态化。我要做的是,在成功检索结果集后,每次调用 SP 并且需要在屏幕上刷新数据时,清除 Columns 集合并从头开始重新创建它们。不要使用AutoGenerateColumns,因为它们几乎没有机会自定义它们的外观,而是自己定义每一列,以便您可以选择要显示的内容和方式。

【讨论】:

  • 在这种情况下,我任由存储过程的编写者摆布,所以我无法提前知道返回了什么数据,因此我无法提前创建列。无论如何,接受的答案显示了一个很好的解决方案。
  • 似乎不是一个好的选择(尽管它确实有效),因为它没有机会为用户优化最终数据的视觉外观。自动生成将始终有效,但问题是您无法进行任何格式化、对齐、可读的标题或任何您可能想要的吸引眼球的事情。即使您根本不控制 SP,至少我认为您应该了解每个参数组合的结果,因此您可以为最终用户相应地布局 UI,因为他们无疑不喜欢原始 DB数据。
【解决方案2】:

这是我找到的最佳答案:How to use a DataAdapter with stored procedure and parameter

简而言之,使用 DataAdapter 和 DataTable。即使使用 AutoGenerateColumns,列标题看起来也很棒,并且无论返回的表结构如何,它都可以正常工作。

格雷格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2016-08-07
    • 2014-05-23
    • 1970-01-01
    • 2017-06-09
    • 2018-04-20
    相关资源
    最近更新 更多