我正在使用VSTS 2008 + ADO.Net + C#+。Net 3.5 + SQL Server 2008.我在客户端使用ADO.Net连接到数据库服务器以执行存储过程,然后从存储过程返回结果
这是我的代码。我有两个关于超时的问题,
如果我没有明确设置任何超时相关设置,对于与数据库服务器的连接,是否有任何超时设置(例如,如果在某些默认时间内无法连接到数据库服务器,则会有一些超时例外?)?
如果我没有明确设置任何与超时相关的设置,对于执行存储过程,是否有任何超时设置(例如,如果无法从服务器检索到ADO.Net客户端的结果一段默认时间,会有一些超时异常?)?
using (SqlConnection currentConnection = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Trusted_Connection=true;Asynchronous Processing=true"))
{
// check current batch conut
currentConnection.Open();
using (SqlCommand RetrieveOrderCommand = new SqlCommand())
{
RetrieveOrderCommand.Connection = currentConnection;
RetrieveOrderCommand.CommandType = CommandType.StoredProcedure;
RetrieveOrderCommand.CommandText = "prc_GetOrders";
RetrieveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output;
RetrieveBatchCountCommand.ExecuteNonQuery();
int rowCount = Convert.ToInt32(RetrieveOrderCommand.Parameters["@Count"].Value);
}
}
答案 0 :(得分:43)
正如gbn已经提到的,有两种类型的超时:
1)连接超时:这由连接字符串控制:
Data Source=.;Initial Catalog=TestDB;
Trusted_Connection=true;Asynchronous Processing=true
如果您向此字符串添加Connect Timeout=120
,您的连接将尝试120秒打开然后中止。
Data Source=.;Initial Catalog=TestDB;
Trusted_Connection=true;Asynchronous Processing=true;
Connect Timeout=120;
2)命令超时:对于每个命令,您还可以指定超时 - 在取消查询之前,ADO.NET将等待该时间。您在SqlCommand对象上指定:
using (SqlCommand RetrieveOrderCommand = new SqlCommand())
{
RetrieveOrderCommand.CommandTimeout = 150;
}
答案 1 :(得分:13)
是的,有两种可以设置的超时
在VBA,.net等中默认为30秒
答案 2 :(得分:0)
在sqlconnection
类中,有一个名称为ConnectionTimeout
的属性。
这不能直接用于设置所需的连接超时值,因为它是只读的,即只实现了“get”和& “set”未在此属性上实现。因此,我们必须在连接字符串本身和&中使用关键字“Connection Timeout”。设置所需的值。
EXI:
Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connection Timeout=30";(30 means 30 seconds)
30秒是建立与服务器连接的最长时间(如172.160.0.2
或类似ADMINISTRATOR\\SQLEXPRESS
)。如果无法立即建立与服务器的连接,则最多可尝试30次秒。
如果服务器有效&能够连接到服务器&如果数据库名称或登录凭据无效,则此超时将不适用。它会立即抛出无效凭据或数据库的异常