#c #sql-server #freetds
#c #sql-server #freetds
Вопрос:
Я использую FreeTDS для обработки простых SELECT
операторов.
Моя проблема в том, что я не могу получить больше, чем первые 4096 байт большого значения столбца.
Допустим, у нас есть такая таблица:
CREATE TABLE tab (
largecol varbinary(max),
othercol int PRIMARY KEY
);
Мой код выглядит следующим образом (упрощенный и без проверки ошибок):
#include <sybfront.h>
#include <sybdb.h>
int main ()
{
DBPROCESS *dbproc;
LOGINREC *login;
char *data;
DBINT len;
/* setup */
dbinit();
login = dblogin();
DBSETLUSER(login, "username");
DBSETLPWD(login, "password");
DBSETLAPP(login, "my_program");
DBSETLPACKET(login, 10000);
DBSETLNATLANG(login, "us_english");
DBSETLCHARSET(login, "UTF-8");
/* connect */
dbproc = dbopen(login, "hostname");
dbuse(dbproc, "dbname");
/* execute query */
dbcmd(dbproc, "SELECT largecol, othercol FROM tab");
dbsqlexec(dbproc);
dbresults(dbproc);
/* retrieve result */
dbnextrow(dbproc);
data = (char *)dbdata(dbproc, 1);
len = dbdatlen(dbproc, 1);
/* more processing */
}
Теперь, независимо от того, насколько велики данные largecol
, я никогда не получаю более 4096 байт в data
и len
.
Единственное, что мне нужно для выполнения этой работы, — это dbreadtext
функция, но я не понимаю, как ее использовать. Единственный бит информации, который я получаю, это:
Используйте
dbreadtext
вместоdbnextrow
для чтенияSQLTEXT
иSQLIMAGE
значений.
Эта функция не принимает номер столбца в качестве аргумента, поэтому я понятия не имею, как ее использовать. Можно ли использовать его только с запросами, которые извлекают только один столбец?
Как я могу получить данные большого столбца?
Комментарии:
1. Спасибо, я больше (на самом деле) спрашивал, было ли это
text
, но это не так, поэтому убил эту мысль. 🙂2. @Larnu Я также пробовал с
varchar(max)
,text
иimage
, и поведение одинаково для всех. Есть ли проблема сtext
?
Ответ №1:
У FreeTDS есть опция, text size
, которую можно установить в freetds.conf
:
См. Таблицу 3.3, text size
: https://www.freetds.org/userguide/freetdsconf.html
Попробуйте?
Комментарии:
1. Ах, это выглядит правильно. Это также указывает мне
SET TEXTSIZE
, что может быть более простым решением для меня. Я попробую, а затем приму ваш ответ.