有时我的查询超时并导致失败。重试执行查询的最佳方法是什么?
我在执行查询之前验证连接是否打开。但是,由于任何给定时间的服务器负载,可能需要 <1 分钟到 5 分钟以上的时间。我考虑过延长 CommandTimeout,但我认为这不是真正可行的方法。
这是我的sql查询代码。感谢您提供的所有帮助。
private static void ExecuteQuery(string connectionString, string query)
{
SqlConnection connection = new SqlConnection(connectionString);
DataTable output = new DataTable();
try
{
//create new SqlAdataAdapter
SqlDataAdapter command = new SqlDataAdapter {SelectCommand = new SqlCommand(query, connection)};
//connect to Sqldb
connection.Open();
//validate connection to database before executing query
if (connection.State != ConnectionState.Open) return;
Console.WriteLine("Connection successful\nExecuting query...");
//set connection timeout
command.SelectCommand.CommandTimeout = 200;
//create new dataSet in order to input output of query to
DataSet dataSet = new DataSet();
//fill the dataSet
command.Fill(dataSet, "capacity");
DataTable dtTable1 = dataSet.Tables["capacity"];
Console.WriteLine("There are " + dtTable1.Rows.Count + " clusters within the capacity anlaysis.");
output = dtTable1;
}
catch (Exception e)
{
Console.WriteLine("Unable to execute capacity (all records) query due to {0}", e.Message);
}
finally
{
connection.Close();
Declarations.NumOfClusters = output.Rows.Count;
Declarations.finalIssues = Issues(output, 2m, 20, true);
Console.WriteLine("\n---------------Successfully Created Capacity DataSet---------------\n");
}
}
最佳答案
使用 Palmer 库:https://github.com/mitchdenny/palmer
Retry.On<Exception>().For(TimeSpan.FromSeconds(15)).With(context =>
{
// Code that might periodically fail due to some issues.
ExecuteQuery(string connectionString, string query)
if (contect.DidExceptionLastTime)
Thread.Sleep(200); // what ever you wish
});
引用github页面上的API。例如,您可以检查异常的上下文,并在确实发生异常时决定休眠一段时间。 您可以重试更具体的异常。 你可以永远尝试等等。
关于如果超时失败,C# 重试 Sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733221/