增加SQL命令的命令超时

CHR*_*LLE 60 c# sql ado.net connection-timeout

我有一点问题,希望有人可以给我一些建议.我正在运行一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ehs*_*san 109

由于有大量数据,它需要大约2分钟才能返回数据

糟糕的设计.考虑在这里使用分页.

默认连接时间是30秒,我该如何增加它

当您面临命令的暂停时,因此您需要增加sql命令的时间.您可以在命令中指定它

// Setting command timeout to 2 minutes
scGetruntotals.CommandTimeout = 120;
Run Code Online (Sandbox Code Playgroud)

  • @Ehsan当你或一小群人是唯一使用该软件的人时,查询每年只运行几次.在这些情况下,通常不值得优化.(尽管如此,在编写后端企业软件时,一些精心设计的索引可以保护您的理智.) (9认同)
  • @Ehsan,我希望有所不同.....我有一个类似的情况,可以在生产中正确运行(几秒钟),但是在测试服务器上,该服务器被精简并由30秒以上的多个资源共享。在这种情况下,延长超时没有错。 (2认同)
  • 设计不好?不总是。在以前的工作场所,当我们不得不进行生产维护时,我们切换到了备份数据库。在此期间,即使还原到备份服务器时仍保留统计信息,我们也会超时。当某些查询运行的时间更长时,它们有时会生成不同的执行计划,因此即使它们与生产设备基本相同,我们也延长了DR /备份服务器上config中的超时时间。不能保证您会有相同的执行计划。恢复后,我们尝试了FULL SCAN,但没有成功。 (2认同)

Aja*_*y P 21

添加你的超时SqlCommand.请注意时间是秒.

// Setting command timeout to 1 second
scGetruntotals.CommandTimeout = 1;
Run Code Online (Sandbox Code Playgroud)

  • 感谢写作,"请注意时间是秒." (15认同)