Доброго времени суток!
Столкнулся со следующей проблемой в 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?