0

我需要在 Visual Studio 2010 中更新数据集表适配器。它基于存储过程。存储过程有参数

    @IDportfolio INT
,   @Date varchar(50)           = NULL
,   @IDorder int                = NULL
,   @IDsession nvarchar(300)    = NULL
,   @User varchar(100)          = NULL
,   @UDNsXML NVARCHAR(MAX)      = NULL
,   @DEBUG  INT                 = 0

表适配器具有以下方法:

Fill,GetData (@IDportfolio, @Date, @IDorder, @IDsession, @User, @UDN)

所以我需要刷新它。在该过程中,只有当@DEBUG 设置为1 时才会执行一个IF 语句。在该IF 语句中,有一些用于内部调试的SELECT 语句。从签名中可以看出,值 1 显然不是默认值,但设计者在刷新方法时,就像为 @DEBUG 参数发送值 1。因此,它不是返回应该返回的值,而是返回一组错误的值,并且设计者试图根据这些返回的值制作方法。

为什么设计师会这样工作并且 INT 参数有一些默认值,还是他忽略了默认值?我也注意到实体框架中的类似行为。

4

1 回答 1

1

好吧,(VS)设计者需要确定发送的值(参数)和返回的值(列和数据类型)。(生成关联的类)。它使用可以松散地称为反射的东西。要做到这一点,存储过程必须符合某些规则,我发现了 4 个,在我的脑海中,这里是重要的 3 个:

  • 只能返回一个行集(MS 在某处明确说明了这一点)
  • 行集必须在存储过程之外是持久的,即它不能来自表变量。(这是MS在某处明确说明的)
  • 它必须是确定性的。(这是MS在某处明确说明的)

使用调用软件永远不会设置为 1 的调试参数将允许您运行 proc 进行测试并在存储过程的不同点返回各种值。然而对于 VS 设计者来说,因为这些行没有(默认)返​​回,当被 VS 分析时,proc 仍然会运行。

于 2013-06-21T15:06:07.677 回答