更改SqlConnection超时

时间:2012-04-11 14:57:59

标签: c# .net sql-server sqlconnection

我试图覆盖15秒的默认SqlConnection超时,并收到错误消息

  无法分配

属性或索引器,因为它是只读的。

有解决方法吗?

using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
   connection.Open();

   using (SqlCommand command = connection.CreateCommand())
   {
       command.CommandType = CommandType.StoredProcedure;
       connection.ConnectionTimeout = 180; // This is not working 
       command.CommandText = "sproc_StoreData";
       command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
       command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);

       command.ExecuteNonQuery();
    }
}

10 个答案:

答案 0 :(得分:131)

如果要为特定查询提供超时,则CommandTimeout是前进的方法。

它的用法是:

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.

答案 1 :(得分:37)

您可以在连接字符串中设置超时值,但在连接后它是只读的。您可以在http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

了解更多信息

正如Anil所暗示的,ConnectionTimeout可能不是您所需要的;它控制ADO驱动程序在建立新连接时等待的时间。您的使用似乎表明需要等待超过正常时间才能执行特定的SQL查询,在这种情况下,Anil完全正确;使用CommandTimeout(R / W)来更改单个SqlCommand的预期完成时间。

答案 2 :(得分:16)

您可以随时将其添加到您的连接字符串中:

connect timeout=180;

答案 3 :(得分:15)

更简洁的方法是在xml文件中设置connectionString,例如Web.Confing(WepApplication)App.Config(StandAloneApplication)

 <connectionStrings>
    <remove name="myConn"/>
    <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/>
  </connectionStrings>

通过代码,您可以通过这种方式获得连接:

public static SqlConnection getConnection()
{
        string conn = string.Empty;
        conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
        SqlConnection aConnection = new SqlConnection(conn);
        return aConnection;
}

只有创建实例,才能设置ConnectionTimeout。 创建实例时,不要更改此值。

答案 4 :(得分:7)

您可以将Connection Timeout=180;添加到连接字符串

答案 5 :(得分:6)

旧帖子,但是当我找到我要搜索的内容时,我想我会在这个主题中添加一些信息。我打算添加评论,但我没有足够的代表。

正如其他人所说:

connection.ConnectionTimeout用于初始连接

command.CommandTimeout用于个人搜索,更新等。

可是:

connection.ConnectionTimeout 用于提交和回滚事务。

是的,这是一个绝对疯狂的设计决定。

因此,如果您在提交或回滚时遇到超时,则需要通过连接字符串增加此值。

答案 6 :(得分:2)

您需要使用command.CommandTimeout

答案 7 :(得分:1)

您还可以使用SqlConnectionStringBuilder

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
    // code goes here
}

答案 8 :(得分:0)

您可以将连接超时设置为连接级别和命令级别。

  

在连接字符串中添加“连接超时= 10”。现在连接超时为10秒。

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10";
using (var con = new SqlConnection(connectionString))
{

}
  

将CommandTimeout属性的设置为SqlCommand

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword";
using (var con = new SqlConnection(connectionString))
{

    using (var cmd =new SqlCommand())
    {
        cmd.CommandTimeout = 10;
    }

}

答案 9 :(得分:0)

我找到了一个关于此主题的优秀博客文章: https://improve.dk/controlling-sqlconnection-timeouts/

基本上,您可以在连接字符串中设置“连接超时”,或者在命令对象上设置“连接超时”。

请注意,超时时间以秒为单位。