Я создал функцию, которая вставляет данные в таблицу базы данных MSSQL 2022. Функция работает нормально, когда я строю его, используя релиз win32 \, но сбой, когда я использую x64 \ release. Я получил ошибку dbstatus_e_cantconvertvalue для первого столбца, который является строкой (varchar или nvarchar). Я попытался использовать оба, чтобы посмотреть, изменило ли это. Если я установите данные в NULL (DBStatus_S_ISNULL), он вставит запись с нулевым значением. < /P>
У меня установлена текущая версия драйвера MSOLEDBSQL, а также самая последняя версия VC ++ REDISTIORB (оба поставленных версий x64 и 32. Большинство из них менее 128 символов, размер варчара составляет 2048. Скомпилирован как 32 -битное приложение Win, которое он работает идеально, и вставлен примерно в 50 тысячах строк. Соблюдается как x64, он терпит неудачу в каждой строке. < /P>
DBBindings[0].bPrecision = 0;
DBBindings[0].bScale = 0;
DBBindings[0].dwFlags = 0;
DBBindings[0].dwPart = DBPART_VALUE | DBPART_STATUS | DBPART_LENGTH;
DBBindings[0].eParamIO = DBPARAMIO_NOTPARAM;
DBBindings[0].iOrdinal = 1;
DBBindings[0].obLength = offsetof(DBTblStruct, m_length[0]);
DBBindings[0].obStatus = offsetof(DBTblStruct, m_status[0]);
DBBindings[0].pBindExt = NULL;
DBBindings[0].pObject = NULL;
DBBindings[0].pTypeInfo = NULL;
DBBindings[0].dwMemOwner = DBMEMOWNER_CLIENTOWNED;
DBBindings[0].cbMaxLen = sizeof(dbRow.StringW);
DBBindings[0].obValue = offsetof(DBTblStruct, StringW);
DBBindings[0].wType = DBTYPE_WSTR;
ZeroMemory(&dbRow.StringW, sizeof(dbRow.StringW));
wcsncpy(dbRow.StringW, StringW, wcslen(StringW));
dbRow.m_status[0] = DBSTATUS_S_OK;
hr = pIRow->CreateAccessor(DBACCESSOR_ROWDATA, //dwAccessorFlags
1, //ULONG cBindings
DBBindings, //rgBindings[]
sizeof(DBTblStruct), //cbRowSize,
&hAccessor, //phAccessor
RowBindStatus ); //rgStatus[]
//Always returns S_OK - No errors
hr = spRowsetUpdate->InsertRow(DB_NULL_HCHAPTER, //hReserved
hAccessor, //hAccessor
&dbRow, //pData
phRow); //phRow
//Always returns 0x80040E21
//m_status[0] is set to DBSTATUS_E_CANTCONVERTVALUE
< /code>
Я попробовал оба ANSI (dbtype_str - varchar) и unicode (dbtype_wstr - nvarchar). Пробовал использовать только один символ в строке, и он не работает с dbstatus_e_cantconvertvalue. Тестовая таблица SQL с одним столбцом использовалась для исключения проблем с другими столбцами. Я использовал аналогичный код, скомпилированный для X64, но с Oracle. Это первое с использованием MSSQL 2022 с клиентом x64.
Подробнее здесь: https://stackoverflow.com/questions/796 ... x64-builds
IRowsetchAnge :: ошибка вставки dbstatus_e_cantconvertvalue только на строительстве x64 ⇐ C++
Программы на C++. Форум разработчиков
1747521924
Anonymous
Я создал функцию, которая вставляет данные в таблицу базы данных MSSQL 2022. Функция работает нормально, когда я строю его, используя релиз win32 \, но сбой, когда я использую x64 \ release. Я получил ошибку dbstatus_e_cantconvertvalue для первого столбца, который является строкой (varchar или nvarchar). Я попытался использовать оба, чтобы посмотреть, изменило ли это. Если я установите данные в NULL (DBStatus_S_ISNULL), он вставит запись с нулевым значением. < /P>
У меня установлена текущая версия драйвера MSOLEDBSQL, а также самая последняя версия VC ++ REDISTIORB (оба поставленных версий x64 и 32. Большинство из них менее 128 символов, размер варчара составляет 2048. Скомпилирован как 32 -битное приложение Win, которое он работает идеально, и вставлен примерно в 50 тысячах строк. Соблюдается как x64, он терпит неудачу в каждой строке. < /P>
DBBindings[0].bPrecision = 0;
DBBindings[0].bScale = 0;
DBBindings[0].dwFlags = 0;
DBBindings[0].dwPart = DBPART_VALUE | DBPART_STATUS | DBPART_LENGTH;
DBBindings[0].eParamIO = DBPARAMIO_NOTPARAM;
DBBindings[0].iOrdinal = 1;
DBBindings[0].obLength = offsetof(DBTblStruct, m_length[0]);
DBBindings[0].obStatus = offsetof(DBTblStruct, m_status[0]);
DBBindings[0].pBindExt = NULL;
DBBindings[0].pObject = NULL;
DBBindings[0].pTypeInfo = NULL;
DBBindings[0].dwMemOwner = DBMEMOWNER_CLIENTOWNED;
DBBindings[0].cbMaxLen = sizeof(dbRow.StringW);
DBBindings[0].obValue = offsetof(DBTblStruct, StringW);
DBBindings[0].wType = DBTYPE_WSTR;
ZeroMemory(&dbRow.StringW, sizeof(dbRow.StringW));
wcsncpy(dbRow.StringW, StringW, wcslen(StringW));
dbRow.m_status[0] = DBSTATUS_S_OK;
hr = pIRow->CreateAccessor(DBACCESSOR_ROWDATA, //dwAccessorFlags
1, //ULONG cBindings
DBBindings, //rgBindings[]
sizeof(DBTblStruct), //cbRowSize,
&hAccessor, //phAccessor
RowBindStatus ); //rgStatus[]
//Always returns S_OK - No errors
hr = spRowsetUpdate->InsertRow(DB_NULL_HCHAPTER, //hReserved
hAccessor, //hAccessor
&dbRow, //pData
phRow); //phRow
//Always returns 0x80040E21
//m_status[0] is set to DBSTATUS_E_CANTCONVERTVALUE
< /code>
Я попробовал оба ANSI (dbtype_str - varchar) и unicode (dbtype_wstr - nvarchar). Пробовал использовать только один символ в строке, и он не работает с dbstatus_e_cantconvertvalue. Тестовая таблица SQL с одним столбцом использовалась для исключения проблем с другими столбцами. Я использовал аналогичный код, скомпилированный для X64, но с Oracle. Это первое с использованием MSSQL 2022 с клиентом x64.
Подробнее здесь: [url]https://stackoverflow.com/questions/79622662/irowsetchangeinsertrow-error-dbstatus-e-cantconvertvalue-only-on-x64-builds[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия