【问题标题】:How does Visual Studio dataset designer work when creating table adapter based on procedureVisual Studio 数据集设计器在基于过程创建表适配器时如何工作
【发布时间】:2013-06-18 10:18:54
【问题描述】:

我需要在 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 参数是否有一些默认值,或者他是否忽略了默认值?我也注意到实体框架中的类似行为。

【问题讨论】:

    标签: sql-server visual-studio-2010 ado.net dataset dataset-designer


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2011-02-08
    • 2010-12-11
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多