|  07.06.2017, 12:47 | #1 | 
| Участник | Заполнение 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 | 
| Участник | 
			
			Если только '0x' перенести в переменную insertStr перед %1.    
				__________________ // no comments | 
|  | 
|  08.06.2017, 11:39 | #3 | 
| Участник | 
			
			Удалось найти решение через 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). | |
|  | 
| 
 |