【问题标题】:c# - Tableadapter not working because of timeoutc# - Tableadapter 由于超时而无法工作
【发布时间】:2017-05-22 22:59:05
【问题描述】:

我的TableAdapter 是在 ADO.NET 数据集中定义的。我的存储过程在 SSMS 中执行 50 秒。当我尝试在应用程序中执行它时,我会超时。

如何设置TableAdapter的超时连接值?

【问题讨论】:

    标签: c# .net winforms timeout tableadapter


    【解决方案1】:

    我们可以在两个地方设置超时。

    1. SqlConnection
    2. SqlCommand

    SqlConnection 具有 ConnectionTimeout 属性。它指定 ADO.Net 在尝试连接到服务器时等待的时间。如果没有与服务器建立连接(网络关闭/服务器未运行等),则会引发异常。

    SqlCommand 具有 CommandTimeout 属性。它指定执行命令后返回结果的等待时间(您调用Execute/ExecuteNoQuery 等)。如果在指定时间内没有返回结果,则抛出异常。默认情况下,命令超时时间为 30 秒。所以,如果命令需要 50 秒,你会得到一个异常。

    SqlConnectionSqlCommand 很简单,只需设置对象的属性值即可。

    对于TableAdapter,您有两种设置ConnectionTimeout 的方法(都导致相同的输出)。首先是在连接字符串中设置。其次是在为适配器设置连接时在Advanced 属性对话框中设置它。

    对于CommandTimeout,您需要从正在超时的适配器访问特定命令。如果选择命令被炸毁,你可以使用这个:

    var ta = new YouTableAdapter();
    ta.Adapter.SelectCommand.CommandTimeout = 100;
    

    【讨论】:

    • 我在连接字符串中设置了连接超时。有效。但是今天我像以前一样在 30 秒后得到了“超时连接”。我不知道我该如何解决这个问题..
    • 你试过设置Adapter.SelectCommand.CommandTimeout吗?你能检查一下ConnectionSelectCommand 的超时时间吗?这可能是任何原因,但您是否考虑过分页数据以更快地加载它?或者在服务器上设置一些索引?
    • 据我了解,您无法为键入的 TableAdapter 设置 CommandTimeout,因为没有公开公共属性。我扩展了部分 TableAdapter 类并设置了 CommandTimeout 值。然后我使用这个 TableAdapter 从 windows 窗体类中调用了这个属性。
    • 好吧,我的代码中没有使用TableAdapter。我添加了一个数据源并从VS 复制了这些行。所以这意味着它为您提供了不同的命令来设置属性。 注意 您不能在 TableAdapter 本身上设置 CommandTimeout。您必须选择像SelectUpdate 等这样的命令并设置超时。
    【解决方案2】:

    您需要更改连接字符串而不是表适配器的超时时间:

    Connection timeout for SQL server

    祝你好运。

    【讨论】:

    • 谢谢。它完成了这项工作。
    • 昨天成功了。今天我像以前一样超时 - 30 秒后。
    • 您可以将其从 30 秒以上增加 如果数据耗时过长可能是基础数据中的关系问题或者只是在调试问题 IIS express 上限为 3GB 时发现了一个奇怪的行为,这是不明智的ram 内存使用 :( 尝试更改它并查看您的表索引。
    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2021-10-27
    • 2020-10-08
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多