AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.06.2017, 12:47   #1  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Заполнение varbinary поля вставкой записи через ODBCConnection
Всем привет!
Есть переменная - контейнер [xRecord], ей нужно заполнить поле Data в таблице ExternalTable во внешней БД.
Реализация через ODBCConnection.
X++:
...
container      = [xRecord];
odbcConnection = new OdbcConnection(LoginProperty);
statement      = odbcConnection.createStatement();
insertStr      = strFmt('INSERT INTO [dbo].[EXTERNALTABLE] ([DATA]) VALUES (%1)', <?>);
statement.executeUpdate(insertStr);
Чем заполнять <?>?
Через BinData::dataToString(new ContainerClass([common]).toBlob()) теряется "0x" и делится на N строк.
Сделал велосипед: strRem('0x'+BinData::dataToString(new ContainerClass([common]).toBlob()),'\n')
А есть более корректное решение?
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.06.2017, 17:15   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если только '0x' перенести в переменную insertStr перед %1.
__________________
// no comments
Старый 08.06.2017, 11:39   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Удалось найти решение через SqlCommand:
X++:
    System.Data.SqlClient.SqlCommand                sqlCommand;
    System.Data.SqlClient.SqlConnection             sqlConnection;
    System.Data.SqlClient.SqlParameterCollection    parameterCollection;
    System.Data.SqlClient.SqlParameter              sqlParameter;
    System.IO.MemoryStream                          memoryStream;
    System.Byte[]                                   bytes;
    ;
    
    sqlConnection = new System.Data.SqlClient.SqlConnection(<connection string>);
    sqlCommand    = new System.Data.SqlClient.SqlCommand('INSERT INTO EXTERNALTABLE ([DATA]) VALUES (@Data)', sqlConnection);
    
    parameterCollection = sqlCommand.get_Parameters();
    sqlParameter        = parameterCollection.Add('@Data', System.Data.SqlDbType::VarBinary);
    
    memStream      = Binary::constructFromContainer(new ContainerClass(<container>).toBlob()).getMemoryStream();
    bytes          = memStream.ToArray();
    memStream.Close();
    
    sqlParameter.set_Value(bytes);
    
    try
    {
        sqlConnection.Open();
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();
    }
    catch
    {
        info(CLRInterop::getLastException().ToString());
        sqlConnection.Close();
    }

Последний раз редактировалось Товарищ ♂uatr; 08.06.2017 в 11:49.
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мультипаспорт записи Ace of Database DAX: Программирование 20 29.03.2022 10:49
Dax12 форма ListPage: как скрыть/отобразить MenuItemButton без смены фокуса записи в гриде Aquarius DAX: Программирование 10 30.11.2016 14:36
AX 2012 R2: импорт данных через Excel Add-in и добавление поля в стандартную таблицу Kabardian DAX: Программирование 1 13.02.2014 22:40
EP Ax 4.0 Web-форма. Частично некоторые поля дублируются с предыдущей записи. vasiliy DAX: Программирование 2 29.10.2008 14:57
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:49.