Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere 嵌入式 SQL

 

发送和检索 Long 型值

在嵌入式 SQL 应用程序中,发送和检索 LONG VARCHAR、LONG NVARCHAR 和 LONG BINARY 值的方法与发送和检索其它数据类型的值的方法不同。标准 SQLDA 字段包含的数据不得超过 32767 字节,因为保存长度信息的字段(sqldata、sqllen 和 sqlind)是 16 位的值。将这些值更改为 32 位值会破坏现有的应用程序。

说明 LONG VARCHAR、LONG NVARCHAR 和 LONG BINARY 值的方法与说明其它数据类型的值的方法相同。

有关如何检索和发送值的信息,请参见检索 LONG 数据发送 LONG 数据

静态 SQL 结构

使用单独的字段来保存 LONG BINARY、LONG VARCHAR 和 LONG NVARCHAR 数据类型的已分配长度、已存储长度和未截断长度。静态 SQL 数据类型在 sqlca.h 中定义如下:

#define DECL_LONGVARCHAR( size )         \
  struct { a_sql_uint32    array_len;    \
           a_sql_uint32    stored_len;   \
           a_sql_uint32    untrunc_len;  \
           char            array[size+1];\
         }
#define DECL_LONGNVARCHAR( size )        \
  struct { a_sql_uint32    array_len;    \
           a_sql_uint32    stored_len;   \
           a_sql_uint32    untrunc_len;  \
           char            array[size+1];\
         }
#define DECL_LONGBINARY( size )          \
  struct { a_sql_uint32    array_len;    \
           a_sql_uint32    stored_len;   \
           a_sql_uint32    untrunc_len;  \
           char            array[size];  \
         }
动态 SQL 结构

对于动态 SQL,根据需要将 sqltype 字段设置为 DT_LONGVARCHAR、DT_LONGNVARCHAR 或 DT_LONGBINARY。关联的 LONGVARCHAR、LONGNVARCHAR 和 LONGBINARY 结构如下:

typedef struct LONGVARCHAR {
    a_sql_uint32    array_len;
    a_sql_uint32    stored_len;
    a_sql_uint32    untrunc_len;
    char            array[1];
} LONGVARCHAR, LONGNVARCHAR, LONGBINARY;
结构成员定义

对于静态和动态 SQL 结构,结构成员定义如下:

  • array_len   (发送和检索。)为结构中数组部分分配的字节数。

  • stored_len   (发送和检索。)数组中存储的字节数。总是小于或等于 array_len 和 untrunc_len。

  • untrunc_len   (仅检索。)值不被截断的情况下数组中将存储的字节数。总是大于或等于 stored_len。如果发生截断,则此值大于 array_len。


检索 LONG 数据
发送 LONG 数据