如何使用 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
中的数据有多大,我在data
和len
中的数据都不会超过4096字节。
我必须使这项工作的唯一线索是 dbreadtext
功能,但我不明白如何使用它。我得到的唯一信息是:
Use dbreadtext
instead of dbnextrow
to read SQLTEXT
and SQLIMAGE
values.
该函数没有将列号作为参数,所以我不知道如何使用它。它只能用于只检索单个列的查询吗?
如何检索大列数据?
FreeTDS 有一个选项,text size
,可以在 freetds.conf
:
中设置
参见table 3.3,text size
:
https://www.freetds.org/userguide/freetdsconf.html
试试看?
我正在使用 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
中的数据有多大,我在data
和len
中的数据都不会超过4096字节。
我必须使这项工作的唯一线索是 dbreadtext
功能,但我不明白如何使用它。我得到的唯一信息是:
Use
dbreadtext
instead ofdbnextrow
to readSQLTEXT
andSQLIMAGE
values.
该函数没有将列号作为参数,所以我不知道如何使用它。它只能用于只检索单个列的查询吗?
如何检索大列数据?
FreeTDS 有一个选项,text size
,可以在 freetds.conf
:
参见table 3.3,text size
:
https://www.freetds.org/userguide/freetdsconf.html
试试看?