SqlCommand.CommandTimeout
和 SqlConnection.ConnectionTimeout
是 .NET 中用于数据库操作的两个不同属性,它们分别控制不同的超时行为。
SqlCommand.CommandTimeout
- 作用:
CommandTimeout
属性用于设置 SQL 命令执行的超时时间(以秒为单位)。如果命令执行时间超过这个时间,将会抛出一个SqlException
。 - 适用场景:当你有一个长时间运行的查询或存储过程时,可以通过设置
CommandTimeout
来避免程序无限期等待。 - 默认值:默认值为 30 秒。
示例
csharp
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("LongRunningQuery", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.CommandTimeout = 60; // 设置命令超时时间为60秒
command.ExecuteNonQuery();
}
}
SqlConnection.ConnectionTimeout
- 作用:
ConnectionTimeout
属性用于设置打开数据库连接的超时时间(以秒为单位)。如果在指定时间内无法建立连接,将会抛出一个SqlException
。 - 适用场景:当你尝试连接到一个可能响应缓慢的数据库服务器时,可以通过设置
ConnectionTimeout
来避免程序无限期等待。 - 默认值:默认值为 15 秒。
示例
csharp
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=30;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open(); // 尝试打开连接,超时时间为30秒
// 连接成功后的操作
}
catch (SqlException ex)
{
// 处理连接超时或其他SQL异常
Console.WriteLine(ex.Message);
}
}
总结
SqlCommand.CommandTimeout
控制的是 SQL 命令执行的超时时间。SqlConnection.ConnectionTimeout
控制的是数据库连接建立的超时时间。
这两个属性可以根据具体的应用场景分别设置,以确保应用程序的健壮性和响应性。