【问题标题】:Change timeout for table adapter (call stored procedure) in Visual Studio 2012 VB project?在 Visual Studio 2012 VB 项目中更改表适配器(调用存储过程)的超时?
【发布时间】:2014-11-26 03:38:39
【问题描述】:

我的问题:对存储过程的调用在 30 秒后超时。似乎自动生成的表适配器没有提供更改它的接口。

问题:如何更改我的 SP 调用的超时值?

环境:Visual Studio 2012,VB.NET 中的代码,数据库:SQL Server 2008 R2。我正在将数据集设计器与数据集一起用于 CRUD 操作并调用存储过程。自动生成的表适配器是从代码中调用的。

研究已经完成:我已经找到了一些 C# 项目的答案,但我对语言的经验很少:post 1

【问题讨论】:

    标签: sql vb.net visual-studio-2012 tableadapter


    【解决方案1】:

    由于您使用的是强类型TableAdapter,它只将DataAdapter 保存为protected 属性,因此您不能直接更改所有SqlCommandCommandTimeouts。你可以做的是扩展这个自动生成的类(它是一个Partial Class)。因此在同一目录下创建另一个同名的类,例如:Public Partial Class YourTableAdapter

    现在您可以创建可以访问DataDapter 的新属性或方法。请注意,该类必须位于相同的(自动生成的)命名空间中。例如:

    Namespace ApplicationName.DataSetNameTableAdapters
        Partial Public Class YourTableAdapter
            Public Property CommandTimeout As Int32
                Get
                    Return Me.CommandCollection(0).CommandTimeout
                End Get
                Set(value As Int32)
                    For Each cmd As SqlCommand In Me.CommandCollection
                        cmd.CommandTimeout = value
                    Next
                End Set
            End Property
        End Class
    End NameSpace
    

    不要扩展原始类 (.designer.vb),它会在设计器中的每次更改时被覆盖。

    现在你可以做:

    Dim adapter = new YourTableAdapter()
    adapter.CommandTimeout = 60 * 30  ' 30 minutes 
    

    【讨论】:

    • 这对我有用,谢谢!我只需要将“cmd”声明为“cmd As SqlCommand”。
    • @DanielHillebrand:我已经批准了编辑。但它为我编译,因为arrays implement IEnumerable(Of T) 你不需要强制转换它。您没有在编译器设置中将 Option Infer 设置为 on。如果类型没有实现IEnumerable(Of T),而只实现非泛型IEnumerable 接口(如DataTable.Rows),则使用AsAs 将对象转换为真实类型。
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2013-05-11
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多