语句参数替换
传递给函数 mcosql_execute_query() 和 mcosql_execute_statement() 的 SQL 语句字符串允许根据类似于标准 printf() 格式字符串替换的规则将应用程序变量值替换到字符串中,但有一些细微差别。在 SQL 语句字符串中,如果百分号**“%”后面跟着单个字符或星号“*”**,则会根据以下类型规范将参数列表中相关变量的值替换进去:
| 替换符 | 说明 |
|---|---|
| %b | 0或1的一个字节值 |
| %f | 一个双精度值 |
| %i | 一个有符号的整数值(4 字节) |
| %l | 一个有符号整数值(8 字节) |
| %p | 一个 8 字节整数(例如autoid)的地址 |
| %r | 映射到记录的结构体(类型为字符串的字段必须为 char* 类型) |
| %R | 映射到记录的结构体(类型为 char<N> 的字段必须为 char[N] 类型) |
| %s | 一个字符指针值(与字符串或 char<n> 字段相关联) |
| %t | 一个 time_t 类型的值 |
| %u | 一个无符号整数值(4 字节) |
| %v | 一个 Value* 类型变量的地址(Value 类型的指针) |
| %w | 一个与 nstring 或 nchar<n> 字段相关联的 wchar_t* 值 |
使用函数 mcosql_prepare_statement() 预编译语句时,可变长度参数列表通常旨在将程序变量绑定到 SELECT 语句结果集中的列。在这种情况下,需要的是接收结果集值的变量的地址。因此,对于 mcosql_prepare_statement(),提供了以下额外的替换类型:
| 替换符 | 说明 |
|---|---|
| %*b | bool变量的地址 |
| %*f | 双变量的地址 |
| %*i | 整型变量的地址 |
| %*l | 一个 int64_t 类型变量的地址 |
| %*p | int64_t变量的地址(例如autoid) |
| %*s | 字符串变量的地址(即 char**) |
| %*S | 一个指向字符串或 char<n> 字段的间接引用的 char* 值 |
| %*t | time_t 类型变量的地址 |
| %*w | 指向 wchar_t* 变量的地址(即 wchar_t**) |
| %*W | 一个宽字符指针值(对 nstring 或 nchar<n> 字段的间接引用) |
映射 SQL 日期和时间字段
为了将 C 语言中的日期或时间数据映射到 SQL 数据类型,C 应用程序应使用 8 字节的 mco_datetime 数据类型(而不是 mco_time 或 mco_date)。日期和时间类型在 SQL 中通过 8 字节的 tpDatetime 类型来表示。
使用 %l 或 *%l 替换说明符,因为这是一个 8 字节或 int64_t 值。
关于数值使用科学记数法的说明
对于数值类型使用科学计数法时(例如 7.5013e+006 而非 7501301),数字必须始终以数字开头,不能将数字定义为 ".e1"。
