更改SqlConnection超时

问题描述 投票:71回答:9

我正在尝试覆盖默认的SqlConnection超时15秒,并收到一条错误消息,指出[

无法分配属性或索引器,因为它是只读的。

有没有解决的办法?

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();
    }
}
c# .net sql-server sqlconnection
9个回答
139
投票

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

其用法是:

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

37
投票

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

阅读更多内容

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


16
投票

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

connect timeout=180;

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。创建实例时,请勿更改此值。


7
投票

您可以在连接字符串中添加Connection Timeout=180;


6
投票

[旧帖子,但由于要查找的内容,我认为我应该为此主题添加一些信息。我本来要添加评论,但是我没有足够的代表。

正如其他人所说:

connection.ConnectionTimeout用于初始连接

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

但:

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

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

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

您需要使用command.CommandTimeout

您也可以使用SqlConnectionStringBuilder

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

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

在连接字符串中添加“连接超时= 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; } }


2
投票
您需要使用command.CommandTimeout

1
投票
您也可以使用SqlConnectionStringBuilder

0
投票
您可以将连接超时设置为连接级别和命令级别。
© www.soinside.com 2019 - 2024. All rights reserved.