簡體   English   中英

c#Btrieve 6.15錯誤22

[英]c# Btrieve 6.15 error 22

我使用以下代碼從基於WBTRV32.dll的BTrieve 6.15數據庫文件中收集數據,但始終將錯誤代碼22返回到讀取下一條數據線的位置-這是我的BTrieve文件未固定列寬的問題嗎?

// 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
                {

                }
            }

}

狀態22表示“數據緩沖區太短”。 根據文檔

將“數據緩沖區長度”設置為大於或等於要檢索的記錄的長度的值。

您需要確保在每次調用之前將“數據緩沖區長度”設置為正確的值。 在您的代碼中,您只需設置一次bufferLength變量。 如果您有可變長度的記錄,則在返回記錄長度時會設置該值,因此,作為開發人員,您將知道返回了多少數據。 在下一個GET調用之前,您需要將其重置為期望返回的最大值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM