Решение вопросов.
1. Записывать в базу контейнера как аксапта это делает (получается такой же Image)
X++:
conClass = new ContainerClass(con);
binData = new BinData();
binData.setData(conClass.toBlob());
string = binData.base64Encode();
clrObject = System.Convert::FromBase64String(string);
//clrObject отправляем в System.Data.SqlClient.SqlParameter.Value
На выходе получаем byte[], который пригоден для записи в базу.
2. Выяснилось что SQL генерирует разные уровни оповещений, и не все являются ошибками, которые перехватывает метод CLRInterop::getLastException().
Также хочу заметить что аксапта не может использовать нетовские handler(обработчик событий. Поэтому
Решение - написание библиотеки, которая в себе содержит функции обработки событий и возвращает готовые исключения типа SqlException или Exception, либо это info от sql типа SqlInfoMessageEventArgs
X++:
public class SysSqlCommand
{
SqlCommand sqlComm;
SqlException sqlEx;
Exception ex;
public SysSqlCommand(SqlCommand _sqlComm)
{
this.sqlComm = _sqlComm;
}
public void ExecuteNonQuery()
{
try
{
sqlComm.ExecuteNonQuery();
}
catch (SqlException _ex)
{
sqlEx = _ex;
throw;
}
catch (Exception _ex)
{
ex = _ex;
throw;
}
}
public SqlException sqlException()
{
return sqlEx;
}
public Exception exception()
{
return ex;
}
}
Вот как то так.