首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# Btrieve 6.15错误22

c# Btrieve 6.15错误22
EN

Stack Overflow用户
提问于 2015-11-02 19:48:29
回答 1查看 424关注 0票数 0

我使用下面的代码从基于WBTRV32.dll的BTrieve 6.15数据库文件中收集数据,我总是在读取下一个数据行的位置得到错误代码22 -是不是我的BTrieve文件没有固定列宽的问题?

代码语言:javascript
复制
// Open file
RecordBuffer dataBuffer = new RecordBuffer();
int bufferLength = System.Runtime.InteropServices.Marshal.SizeOf(dataBuffer);
short status = (short)BTRCALL(0, positionBlock, ref dataBuffer, ref bufferLength, fileNameArray, 0, 0);

        if (status == 0) <== Here Status = 0
        {
            // Get first record
            dataBuffer = new RecordBuffer();
            status = (short)BTRCALL(12, positionBlock, ref dataBuffer, ref bufferLength, fileNameArray, 0, 0); //BGETFIRST

            if (status == 0) <== Here Status = 0
            {
                ...                
            }

            // Get subsequent records
            while (status == 0) // BReturnCodes.END_OF_FILE or an error will occur
            {
                dataBuffer = new RecordBuffer();
                status = (short)BTRCALL(6, positionBlock, ref dataBuffer, ref bufferLength, fileNameArray, 0, 0); //BGETNEXT

                if (status == 0) <=== Here Status = 22 data buffer length overrun
                {

                }
            }

}

EN

回答 1

Stack Overflow用户

发布于 2015-11-02 20:36:35

状态22表示“数据缓冲器太短”。根据documentation

将数据缓冲区长度设置为大于或等于要检索的记录的长度的值。

在每次调用之前,您需要确保数据缓冲区长度设置为正确的值。在您的代码中,只需设置一次bufferLength变量。如果您有可变长度的记录,该值将在返回时设置为记录的长度,这样作为开发人员,您就可以知道返回了多少数据。在下一次GET调用之前,您需要将其重置为预期返回的最大值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33476905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档