Показать сообщение отдельно
Старый 29.01.2012, 10:46   #1  
Raven13 is offline
Raven13
Участник
 
9 / 15 (1) ++
Регистрация: 25.06.2010
Post TimeOut в UserConnection
Доброго времени суток!

Столкнулся со следующей проблемой в DAX2009 SP1, используя класс UserConnection вызываю хранимую процедуру время выполнения, которой в среднем от одной минуты до пяти минут в зависимости от объема данных. Вызов в ахапке выполняется без ошибок, только вот результатов нет. Используя профайлер SQL Server выявил, что вызов хранимой процедуры заканчивается с ошибкой 2 - Abort, хотя если вызвать процедуру из SQL Management Studio выполнение не прерывается.

Так вызываю процедуру используя UserConnection:
X++:
    UserConnection             sqlConnection;
    Statement                     sqlStatement;
    Source                          sqlSource = strfmt("EXEC [dbo].[%1]", _procName);
    SqlStatementExecutePermission sqlPermission;
    ;
    sqlConnection = new UserConnection();
    sqlStatement  = sqlConnection.createStatement();

    sqlPermission = new SqlStatementExecutePermission(sqlSource);
    sqlPermission.assert();

    sqlStatement.executeUpdate(sqlSource);
    sqlStatement.close();

    CodeAccessPermission::revertAssert();
Сейчас удалось решить проблему следующим образом:

X++:
    System.Data.SqlClient.SqlConnection connection;
    System.Data.SqlClient.SqlCommand   command;
    System.Exception  e;
    
    SysSQLSystemInfo   systemInfo =  SysSQLSystemInfo::construct();
    CodeAccessPermission perm = new InteropPermission(InteropKind::ClrInterop);
    ;
    connection = new System.Data.SqlClient.SqlConnection(
        strfmt("Data Source=%1;Initial Catalog=%2;Integrated Security=True",
            systemInfo.getLoginServer(),
            systemInfo.getloginDatabase()));

    command = connection.CreateCommand();

    command.set_CommandText(_procName);
    command.set_CommandType(System.Data.CommandType::StoredProcedure);
    command.set_CommandTimeout(10 * 60);

    try
    {
        connection.Open();
        command.ExecuteNonQuery();
    }
    catch (Exception::CLRError)
    {
        e = ClrInterop::getLastException();
        while(e)
        {
            error(e.get_Message());
            e = e.get_InnerException();
        }
    }
    if (connection.get_State() == System.Data.ConnectionState::Open)
        connection.Close();

    CodeAccessPermission::revertAssert();
Собственно вопрос возможно ли установить Timeout для UserConnection?

Последний раз редактировалось Raven13; 29.01.2012 в 10:58.