如何使用 DB Library for C 从 SQL 服务器列中检索大值?

How to retrieve large values from SQL Server columns using DB Library for C?

我正在使用 FreeTDS 处理简单的 SELECT 语句。

我的问题是我无法获取超过大列值的前 4096 个字节。

假设我们有这样一个 table:

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中的数据有多大,我在datalen中的数据都不会超过4096字节。

我必须使这项工作的唯一线索是 dbreadtext 功能,但我不明白如何使用它。我得到的唯一信息是:

Use dbreadtext instead of dbnextrow to read SQLTEXT and SQLIMAGE values.

该函数没有将列号作为参数,所以我不知道如何使用它。它只能用于只检索单个列的查询吗?

如何检索大列数据?

FreeTDS 有一个选项,text size,可以在 freetds.conf:

中设置

参见table 3.3,text sizehttps://www.freetds.org/userguide/freetdsconf.html

试试看?