增加 SQL 命令的命令超时

问题描述 投票:0回答:6

我有一个小问题,希望有人能给我一些建议。我正在运行一个 SQL 命令,但由于数据量很大,该命令似乎需要大约 2 分钟才能返回数据。但默认的连接时间是 30 秒,我如何增加这个时间,并将其应用到这个命令?

public static DataTable runtotals(string AssetNumberV, string AssetNumber1V)
{
    DataTable dtGetruntotals;

    try
    {
        dtGetruntotals = new DataTable("Getruntotals");

        //SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 6);
        //AssetNumber.Value = AssetNumberV; 

        SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 10);
        AssetNumber.Value = AssetNumberV;

        SqlParameter AssetNumber1 = new SqlParameter("@AssetNumber1", SqlDbType.VarChar, 10);
        AssetNumber1.Value = AssetNumber1V;

        SqlCommand scGetruntotals = new SqlCommand("EXEC spRunTotals @AssetNumber,@AssetNumber1 ", DataAccess.AssetConnection); 
        // scGetruntotals.Parameters.Add(AssetNumber);
        scGetruntotals.Parameters.Add(AssetNumber);
        scGetruntotals.Parameters.Add(AssetNumber1);

        SqlDataAdapter sdaGetruntotals = new SqlDataAdapter();
        sdaGetruntotals.SelectCommand = scGetruntotals;
        sdaGetruntotals.Fill(dtGetruntotals);

        return dtGetruntotals;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error Retriving totals Details: Processed with this error:" + ex.Message);
        return null;
    }
}
c# sql ado.net connection-timeout
6个回答
134
投票

由于数据较多,此命令大约需要 2 分钟才能返回数据

可能是糟糕的设计。考虑在这里使用分页。

默认连接时间是30秒,如何增加这个

由于您的命令面临超时,因此您需要增加 sql 命令的超时。您可以像这样在命令中指定它

// Setting command timeout to 2 minutes
scGetruntotals.CommandTimeout = 120;

25
投票

向您的

SqlCommand
添加命令超时。请注意时间以秒为单位。

// Setting command timeout to 1 second
scGetruntotals.CommandTimeout = 1;

2
投票

由于需要 2 分钟才能响应,因此您可以通过添加以下代码将超时时间增加到 3 分钟

scGetruntotals.CommandTimeout = 180;

注意:参数值以秒为单位。


1
投票

将命令超时设置为 2 分钟。

 scGetruntotals.CommandTimeout = 120;

但是您可以优化存储过程以减少时间! 喜欢

  • 删除 courser 或 while 等
  • 使用分页
  • 使用#tempTable和@variableTable
  • 优化连接表

-1
投票

@davmos 你遇到了什么错误?


-4
投票

不建议将 CommandTimeout 设置为 120。尝试使用上面提到的分页。将 CommandTimeout 设置为 30 被认为是正常的。除此之外的任何事情都被认为是不好的方法,并且通常会导致实施出现问题。现在世界正在以毫秒方式运行。

© www.soinside.com 2019 - 2024. All rights reserved.