Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ado]как передать данные более 8kb через параметы? как передать данные более 8kb через пара 
:(
    Опции темы
Puld
Дата 3.9.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Необходимо передать в поле типа image, серверной БД, данные в бинарном виде объемом более 8кб. Менее 8кб получается передавать, а с большими объемами проблема - выдается сообщение "String data, right truncation".
Перепробовал, как мне кажется, уже все. Пытался подставлять adBinary, adVarBinary, adLongVarBinary, но результат один и тот же - сообщение "String data, right truncation".
подскажите пожалуйста как же быть?

select @@VERSION вернул следующее:
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright © 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

код хранимой процедуры следующий:
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[GUI_AddTask] (
@did uniqueidentifier,
@type int=0,
@dscr varchar(4000)=null,
@data image=null)
AS

set nocount on

declare @ptask uniqueidentifier
declare @taskid uniqueidentifier
declare @cmd varchar(30)
declare @now datetime
set @now=getdate()
...
end


код функции инициализации команды:
Код

bool CSqlADO::Init_GUI_AddTask()
{
    try
    {
        m_CommandPtr_GUI_AddTask = NULL;
        if ( FAILED( m_CommandPtr_GUI_AddTask.CreateInstance( __uuidof(Command) ) ) ) return false;

        _bstr_t strExecProc( "GUI_AddTask" );
        m_CommandPtr_GUI_AddTask->CommandText = strExecProc;
        m_CommandPtr_GUI_AddTask->CommandType = adCmdStoredProc;
        m_CommandPtr_GUI_AddTask->CommandTimeout = 30;
        m_CommandPtr_GUI_AddTask->Prepared = true;

        m_CommandPtr_GUI_AddTask->CreateParameter( "@did",  adGUID, adParamInput, 50 );
        m_CommandPtr_GUI_AddTask->CreateParameter( "@type", adInteger, adParamInput, 50 );
        m_CommandPtr_GUI_AddTask->CreateParameter( "@dscr", adBSTR, adParamInput, 50 );
        m_CommandPtr_GUI_AddTask->CreateParameter( "@data", adBinary, adParamInput, -1);
        return true;
    }
    catch(_com_error e)
    {
        m_sqlLastError=BSTRToQStr(e.Description());
        emit result(m_sqlLastError);
    }
    return false;
}


код вызова хранимой процедуры:
Код

_RecordsetPtr CSqlADO::exec_GUI_AddTask(QString strDID, int type, QString strdsrc, std::string  strTLVData)
{
    try
    {
        m_CommandPtr_GUI_AddTask->ActiveConnection = m_ConnectionPtr;

        _variant_t vtDID( "{" + QStrToBSTR(strDID) + "}");
        _variant_t vttype( type );
        _variant_t vtdsrc( QStrToBSTR(strdsrc));
        _variant_t vtdata = DataTo_variant_t((byte*)strTLVData.c_str(),strTLVData.length());

        _variant_t Index;
        Index.vt = VT_I2;
        Index.iVal = 1;
        m_CommandPtr_GUI_AddTask->GetParameters()->GetItem(Index)->PutValue( vtDID );
        Index.iVal = 2;
        m_CommandPtr_GUI_AddTask->GetParameters()->GetItem(Index)->PutValue( vttype );
        Index.iVal = 3;
        m_CommandPtr_GUI_AddTask->GetParameters()->GetItem(Index)->PutValue( vtdsrc );
        Index.iVal = 4;
        m_CommandPtr_GUI_AddTask->GetParameters()->GetItem(Index)->PutValue( vtdata );

        _RecordsetPtr pRecordSetExecuteRes;
        try
        {            
            pRecordSetExecuteRes = m_CommandPtr_GUI_AddTask->Execute( 0, 0, adCmdStoredProc); // здесь выскакивает "String data, right truncation"
            return pRecordSetExecuteRes;
        }
        catch(_com_error e)
        {
            m_sqlLastError=BSTRToQStr(e.Description());
            emit result(m_sqlLastError);
            return _RecordsetPtr();
        }
        return pRecordSetExecuteRes;
    }
    catch(_com_error e)
    {
        m_sqlLastError=BSTRToQStr(e.Description());
        emit result(m_sqlLastError);
    }
    return NULL;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.