【问题标题】:TableAdapter is returning phantom results in ASP.NETTableAdapter 在 ASP.NET 中返回幻像结果
【发布时间】:2009-07-03 21:45:52
【问题描述】:

我有一个从stored procedure 获取行的 TableAdapter。出于某种原因,当没有结果时,TableAdapter 返回值为 0 的 INT,而不是 NULL。存储过程有NOCOUNT ON

这个问题是我在前端有一个 ListView,带有一个 EmptyDataTemplate,它没有显示出来。当我在查询分析器中运行查询时,我看到它返回 0 而不是 NULL。

存储过程有一个简单的 'SELECT * FROM WHERE' 和一个 INT 参数(非输出)。在查询分析器中运行它,我没有得到任何输出,正如预期的那样。

发生了什么事?

【问题讨论】:

    标签: asp.net sql-server stored-procedures tableadapter


    【解决方案1】:

    检查查询的 tableAdapter 的 ExcuteMode 属性。确保将其设置为“阅读器”。 ExecuteMode 有 3 个选项:

    1. 读取器 - 返回数据行
    2. 标量 - 返回单个值
    3. NonQuery - 返回影响行数的 int

    还要检查参数集合以获取返回值参数。它应该具有属性 AllowDBNull(如果允许空值,则为 true),Direction(ReturnValue)。这个参数应该保存你的 SP 的结果。在您的示例中,它将为 null,因为没有返回任何记录。

    【讨论】:

      【解决方案2】:

      看起来存储过程正在返回结果。所有存储过程都返回一个结果代码。很有可能是这个。

      【讨论】:

      • 其实我已经验证不是这样的。在查询分析器中运行查询没有返回任何结果,同样地,运行我在数据集设计器中没有任何结果的其他 SP 也没有产生这个幻像结果。
      • 如果你在 Sql Server Management Studio 中使用你的存储过程并选择执行到新窗口,它会显示它返回一个@rc。如果存储过程运行并且您不更改它,则该值始终为 0。这可能是巧合。
      • 好吧,你是对的 - 它确实如此。但是,如果是这种情况,所有 SP 在没有结果时会在数据集设计器中返回 0 吗?这似乎没有发生。而真正令人沮丧的是,我的 ListView 无法识别没有结果。对可能发生的事情有任何想法吗?
      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多