【发布时间】:2021-03-03 19:15:21
【问题描述】:
我正在使用 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 中的数据有多大,我在data 和len 中得到的字节数永远不会超过4096。
我必须完成这项工作的唯一线索是dbreadtext 函数,但我不明白如何使用它。我得到的唯一信息是:
使用
dbreadtext而不是dbnextrow来读取SQLTEXT和SQLIMAGE值。
该函数不接受列号作为参数,所以我不知道如何使用它。它只能用于只检索单个列的查询吗?
如何检索大列数据?
【问题讨论】:
-
谢谢,我更(真的)问它是否是
text,但它不是,所以杀死了那个思想火车。 :) -
@Larnu 我也尝试过使用
varchar(max)、text和image,所有的行为都是一样的。text有问题吗?
标签: c sql-server freetds