我有一个控制台应用程序,可将数据从一个数据库移动到另一个数据库应用程序读取数据,更新数据并写入另一个数据库。查询非常简单,并在出现错误时记录。所以我可以尝试分别执行它们,并且它不会花费超过50毫秒(Profiler告诉我)。但是我有很多行,在执行其中一些行(1 000 - 10 000个非常不同的执行行数)后,我得到了一个时间: 超时已到期。操作完成之前已经过了超时时间,或者服务器没有响应。 TimeOut甚至可以在" SELECT"查询。
我已将CommandTimout设置为120并获得 从服务器接收结果时发生了传输级错误。 (提供者:会话提供者,错误:19 - 物理连接不可用) 所以,我认为这不是超时案例。
Profiler和跟踪没有任何意外。
我使用了 SqlConnection.ClearPool(cnnct); 但它没有用;
请帮助。
SQL Vertion:Microsoft SQL Server 2008 R2(SP1)
以下是源和目标dbs的代码。
public IEnumerable<SomeType> GetEntities()
{
IEnumerable<SomeType> result = null;
var selectQuery = GetSelectQuery();
try
{
using (var cnnct = new SqlConnection(_connectionString))
{
cnnct.Open();
var cmd = new SqlCommand(selectQuery, cnnct);
var reader = cmd.ExecuteReader();
result = Convert(reader);
reader.Close();
cmd.Dispose();
}
}
catch (Exception e)
{
Catch(selectQuery, e);
}
return result;
}
public Int32 Save(SomeType entity)
{
Int32 result = 0;
var insertQuery = GetInsertQuery(entity);
try
{
using (var cnnct = new SqlConnection(_connectionString))
{
cnnct.Open();
var cmd = new SqlCommand(insertQuery, cnnct);
result = (Int32)(Decimal)cmd.ExecuteScalar();
cmd.Dispose();
}
}
catch (Exception e)
{
Catch(insertQuery, e);
}
return result;
}