描述
返回列值的字节数。
PB语法
METHOD ColumnBytes (BYVAL vCol AS VARIANT) AS LONG |
参数
vCol
[in]应返回信息的列的索引或名称。结果集的最左列有索引0。结果中的列数可以使用ColumnCount确定。
返回值
列值的字节数。
备注
如果SQL语句当前没有指向有效的行,或者如果列索引超出范围,则结果是未定义的。只有当最近调用步已经返回SQLITE_ROW并且以后不再调用重启或最终确定时才可以调用这些函数。如果在重启或最终确定之后或在步返回了除了SQLITE_ROW之外的任何东西之后调用了这些函数中的任何一个,则结果未定义。步或重启或最终确定在ColumnBytes待处理之前从另一个线程调用,则结果未定义。
如果结果是BLOB或UTF-8字符串,则ColumnBytes函数返回该BLOB或字符串中的字节数。如果结果是UTF-16字符串,则ColumnBytes将字符串转换为UTF-8,然后返回字节数。如果结果是数值,则ColumnBytes使用的snprintf将该值转换为UTF-8字符串,并返回该字符串中的字节数。如果结果为NULL,则ColumnBytes返回零。
由ColumnBytes和ColumnBytesW返回的值不包括字符串末尾的零终止符。为了清楚起见:ColumnBytes和ColumnBytesW返回的值是字符串中的字节数,而不是字符数。
请注意,当类型转换发生时,以前调用ColumnBlob,ColumnText和/或ColumnTextW返回的指针可能无效。
如果初始内容是UTF-16文本,并且ColumnBytes被调用,则内容被转换为UTF-8,并且指针无效。
UTF-16be和UTF-16le之间的转换总是完成,并且不会使先前的指针无效,尽管先前指针引用的缓冲区的内容当然会被修改。其他类型的转换在可能的情况下进行就位,但有时它们是不可能的,在这些情况下,先前的指针无效。
最安全和最简单的记住策略是通过以下方式之一调用这些功能:
ColumnText,后跟ColumnBytes
ColumnBlob,后跟ColumnBytes
ColumnTextW,后跟ColumnBytesW
换句话说,您应该首先调用ColumnBlobColumnBlob或ColumnTextW,以迫使结果为所需格式,然后调用ColumnBytes或ColumnBytesW查找结果的大小。不要将来电ColumnText或ColumnBlob与ColumnBytesW的来电混合,不得将来电ColumnTextW与ColumnBytes的电话混用。
返回的指针是有效的,直到类型转换发生如上所述,或直到步或重启或最终确定被调用。用于保存字符串和BLOB的内存空间将自动释放。不要传递返回的指针ColumnBlob,ColumnText等进入自由.
如果在评估任何这些功能时发生内存分配错误,则返回默认值。默认值为0。对ErrCode的后续调用将返回SQLITE_NOMEM。