"超时"和"传输级错误"多个简单查询期间的异常

时间:2016-08-31 14:23:27

标签: c# sql-server sql-server-2008 ado.net timeoutexception

我有一个控制台应用程序,可将数据从一个数据库移动到另一个数据库应用程序读取数据,更新数据并写入另一个数据库。查询非常简单,并在出现错误时记录。所以我可以尝试分别执行它们,并且它不会花费超过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;
    }

1 个答案:

答案 0 :(得分:0)

可能有一些错误配置&#34;远程查询超时&#34;选项?

查看您的实例

Server Properties

EXEC sp_configure 'remote query timeout', 0 ;  
GO  
RECONFIGURE ;  
GO