Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.64.226] |
|
Страницы: (19) « Первая ... 17 18 [19] все ( Перейти к последнему сообщению ) |
Сообщ.
#271
,
|
|
|
Всем большое спасибо, я думаю тему можно закрыть
|
Сообщ.
#272
,
|
|
|
Думаю, тут можно поставить галку "Вопрос решён" и дать ссылку на C#-тему
|
Сообщ.
#273
,
|
|
|
Цитата Mr.Delphist @ Думаю, тут можно поставить галку "Вопрос решён" и дать ссылку на C#-тему ОК полностью согласен, я просто не заметил что можно ставить галочку"Вопрос решен" так же хочу подвести черту , по данному вопросу вот получившийся исходник #define HYCFG_WIN32 #include "hscli.h" #include <iostream> #include <memory> #define SIZE_HCSQLDSTINFOT 128 int main() { int err = 0 ; // Код ошибки int pdb = 0 ; // Адрес памяти, куда будет записан идентификатор соединения. int pOper = 0 ; // Адрес памяти, куда будет записан идентификатор оператора. int pCol = 0 ; // количество колонок long pStr = 0 ; // количество строк hcRECNO unsigned cntOp = 0 ; // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе". unsigned pRecSize = 0 ; // Размер читаемой записи в байтах, в ф-ции "Открытие результатов для чтения" . hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации err = hcSqlInit(&Init) ; // Инициализация клиентской части err = hcSqlCheckInit() ; // Проверка завершения инициализации err = hcSqlAllocConnect(&pdb) ;// Создать соединение err = hcSqlConnect(pdb, "tcpip:/localhost:13000", "HTADMIN", "PASSWORD") ; //Установить связь с СУБД err = hcSqlAllocStmt(pdb, &pOper) ; // Создать оператор err = hcSqlSetStmtAttr(pOper, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) ; // ф-ция "Изменение параметров оператора" получаем расширенную инф.о полях err = hcSqlExecDirect(pOper, "fix all;select * from TAB4;"); // Выполняем SQLзапрос err = hcSqlNumResultCols(pOper, &pCol) ; // Получить кол-во колонок результата err = hcSqlRowCount(pOper, &pStr) ; // Получить кол-во строк результата err = hcSqlOpenResults(pOper, &pRecSize) ; // Открытие результатов для чтения hcSqlDstInfoT *infCol = new hcSqlDstInfoT[pCol]; // Структура "Информация о колонках результата" err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, infCol, pCol * SIZE_HCSQLDSTINFOT, &cntOp) ;// Получить информацию об операторе char bufOut[1024]; unsigned cntOut = 0; for (long i = 0; i < pStr; i++)//идем по строкам { const auto err = hcSqlReadResults(pOper, i, bufOut, sizeof(bufOut), &cntOut);// Чтение результатов char *p = bufOut; for (size_t j = 0; j < cntOut / sizeof(hcSqlAliasInfoT); ++j)// идем по колонкам { switch (infCol[j].type)// в зависимости от типа колонки преобразовываем в соответствующий тип { case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной { std::string s(p, infCol[j].len); std::cout << s.c_str() << " "; } break; case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины std::cout << *reinterpret_cast<unsigned char *>(p) << " "; break; case HSCLI_ET_BYTE: // 2 Элемент - unsigned char (короткое целое) short std::cout << *reinterpret_cast<unsigned char *>(p) << " "; break; case HSCLI_ET_INTR: // 3 Элемент - signed short std::cout << *reinterpret_cast<signed short *>(p) << " "; break; case HSCLI_ET_WORD: // 4 Элемент - unsigned short std::cout << *reinterpret_cast<unsigned short *>(p) << " "; break; case HSCLI_ET_DATE: // 5 Дата - unsigned short std::cout << *reinterpret_cast<unsigned short *>(p) << " "; break; case HSCLI_ET_NMBR: //6 Номер - 3-х байтовое целое без знака // std::cout << *reinterpret_cast< *>(p); break; case HSCLI_ET_LONG: //7 Элемент - long int std::cout << *reinterpret_cast<long int *>(p) << " "; break; case HSCLI_ET_DWRD: // 8 Элемент - unsigned long int в БД это dword std::cout << *reinterpret_cast<unsigned long int *>(p) << " "; break; case HSCLI_ET_FLOA: // 9 Элемент - float std::cout << *reinterpret_cast<float *>(p) << " "; break; case HSCLI_ET_CURR: // 10 Деньги (double) std::cout << *reinterpret_cast<double *>(p) << " "; break; case HSCLI_ET_DFLT: // 11 Элемент - double std::cout << *reinterpret_cast<double *>(p) << " "; break; case HSCLI_ET_QINT: // 12 Элемент - signed __int64 std::cout << *reinterpret_cast<signed __int64 *>(p) << " "; break; case HSCLI_ET_QWRD: // 13 Элемент - unsigned __int64 std::cout << *reinterpret_cast<unsigned __int64 *>(p) << " "; break; } p += infCol[j].len; } std::cout << std::endl; } hcSqlCloseResults(pOper); // Закрытие доступа к результатам hcSqlFreeConnect(pdb); // Освободить соединение hcSqlDone(); // Завершение работы std::system("pause"); } Добавлено Цитата Mr.Delphist @ и дать ссылку на C#-тему сразу на С# не получится потому что выяснилось однозначно надо сначала сделать прослойку на С++/CLI |
Сообщ.
#274
,
|
|
|
Эх , как жаль , на С/С++ все так хорошо пошло , а на C# ни кто не хочет помочь
|
Сообщ.
#275
,
|
|
|
char bufOut[1024]; auto err = hcSqlReadResults(pOper, i, bufOut, sizeof(bufOut), &cntOut); максимальный буфер чтения у hcSqlReadResults 65535 надо выносить эту функцию из общего цикла чтения данных и читать блоками по 65535, пока не будет достигнут конец &pRecSize*&pStr по одной строке читать, это долго. |