如何使用 C 的 DB 库从 SQL Server 列中检索大值?
Posted
技术标签:
【中文标题】如何使用 C 的 DB 库从 SQL Server 列中检索大值?【英文标题】:How to retrieve large values from SQL Server columns using DB Library for C? 【发布时间】: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
有问题吗?
【参考方案1】:
FreeTDS有一个选项,text size
,可以在freetds.conf
中设置:
见表 3.3,text size
:
https://www.freetds.org/userguide/freetdsconf.html
试试看?
【讨论】:
啊,这看起来不错。它还指向SET TEXTSIZE
,这对我来说可能是更简单的解决方案。我会试试看,然后接受你的回答。以上是关于如何使用 C 的 DB 库从 SQL Server 列中检索大值?的主要内容,如果未能解决你的问题,请参考以下文章
如何让Activiti-Explorer使用sql server数据库
如何实现Paradox数据库文件(*.db)到sql server数据库的导入----要求用代码,不用向导