# Builtin - 数据库

## `execSql([flags,] [params,] database_name, sql, var result[, user_name, password][, data_keep_null])`

声明：function

执行 SQL 语句。flags、params、user_name、password 和 data_keep_null 均为可选参数；不需要时可按参数顺序省略

<!-- tags: 数据库 SQL database -->

| 参数             | 类型                   | 说明                               |
| ---------------- | ---------------------- | ---------------------------------- |
| `flags`          | integer                | 可选执行标志。                     |
| `params`         | array                  | 可选存储过程参数。                 |
| `database_name`  | string                 | 数据库别名。                       |
| `sql`            | string                 | 要执行的 SQL 语句。                |
| `result`         | array\|string\|integer | 写回查询结果、影响行数或错误信息。 |
| `user_name`      | string                 | 用户名。                           |
| `password`       | string                 | 密码。                             |
| `data_keep_null` | boolean                | 是否在结果集中保留空值。           |

返回：integer

### 示例

范例01：基本用法

```tsl
// demo_db 为已配置的数据库别名。
result_count := execSql("demo_db", "select 1 as value", result);
echo result_count > 0, "\n";
// 输出：1
```

## `sqlBeginTrans(database_alias)`

声明：function

开始数据库事务。返回 -1 表示连接失败，-2 表示异常，其它值表示事务层级

<!-- tags: 数据库 SQL database -->

| 参数             | 类型   | 说明         |
| ---------------- | ------ | ------------ |
| `database_alias` | string | 数据库别名。 |

返回：integer

### 示例

范例01：基本用法

```tsl
// demo_db 为已配置的数据库别名。
level := sqlBeginTrans("demo_db");
echo level >= -2, "\n";
// 输出：1
```

## `sqlCloseConn([database_alias])`

声明：function

关闭指定数据库别名的连接；省略 database_alias 时关闭全部数据库连接

<!-- tags: 数据库 关闭 close SQL database -->

| 参数             | 类型   | 说明         |
| ---------------- | ------ | ------------ |
| `database_alias` | string | 数据库别名。 |

返回：integer

### 示例

范例01：基本用法

```tsl
closed := sqlCloseConn();
echo closed >= 0, "\n";
// 输出：1
```

## `sqlCommit(database_alias)`

声明：function

提交数据库事务。返回 -1 表示无事务或连接失败，-2 表示异常，0 表示提交后无事务，1 表示仍在事务中

<!-- tags: 数据库 SQL database -->

| 参数             | 类型   | 说明         |
| ---------------- | ------ | ------------ |
| `database_alias` | string | 数据库别名。 |

返回：integer

### 示例

范例01：基本用法

```tsl
// demo_db 为已配置且已开始事务的数据库别名。
result := sqlCommit("demo_db");
echo result >= -2 and result <= 1, "\n";
// 输出：1
```

## `sqlErrorMsg()`

声明：function

获取最近一次 SQL 执行错误信息

<!-- tags: 数据库 获取 查询 SQL database -->

返回：string

### 示例

范例01：基本用法

```tsl
echo length(sqlErrorMsg()) >= 0, "\n";
// 输出：1
```

## `sqlInTrans(database_alias)`

声明：function

检查数据库连接是否处于事务中。返回 -1 表示连接失败，-2 表示异常，0 表示无事务，1 表示有事务

<!-- tags: 数据库 SQL database -->

| 参数             | 类型   | 说明         |
| ---------------- | ------ | ------------ |
| `database_alias` | string | 数据库别名。 |

返回：integer

### 示例

范例01：基本用法

```tsl
// demo_db 为已配置的数据库别名。
result := sqlInTrans("demo_db");
echo result >= -2 and result <= 1, "\n";
// 输出：1
```

## `sqlRollback(database_alias)`

声明：function

回滚数据库事务。返回 -1 表示无事务或连接失败，-2 表示异常，0 表示回滚后无事务，1 表示仍在事务中

<!-- tags: 数据库 SQL database -->

| 参数             | 类型   | 说明         |
| ---------------- | ------ | ------------ |
| `database_alias` | string | 数据库别名。 |

返回：integer

### 示例

范例01：基本用法

```tsl
// demo_db 为已配置且已开始事务的数据库别名。
result := sqlRollback("demo_db");
echo result >= -2 and result <= 1, "\n";
// 输出：1
```

## `sysDbfRead(alias, file_name, var value[, is_col_info])`

声明：function

读取 DBF 文件内容或字段结构。is_col_info 可省略，缺省为假；为真时读取字段结构

<!-- tags: 数据库 读取 获取 SQL database DBF -->

| 参数          | 类型          | 说明                                 |
| ------------- | ------------- | ------------------------------------ |
| `alias`       | string        | 目录别名；空字符串表示当前目录。     |
| `file_name`   | string        | 文件名称。                           |
| `value`       | array\|string | 成功时写回数据，失败时写回错误信息。 |
| `is_col_info` | boolean       | 可选；为真时读取字段结构，缺省为假。 |

返回：boolean

### 示例

范例01：基本用法

```tsl
data := `array("A": (1, 2, 3), "B": ("a", "b", "c"));
sysDbfWrite("", "example.dbf", data);
ok := sysDbfRead("", "example.dbf", restored);
echo ok and ifArray(restored), "\n";
// 输出：1
```

## `sysDbfWrite(alias, file_name, value[, col_info])`

声明：function

将带字符串列名的数组写入 DBF 文件。col_info 可省略，缺省时自动判断字段类型

<!-- tags: 数据库 写入 保存 SQL database DBF -->

| 参数        | 类型   | 说明                             |
| ----------- | ------ | -------------------------------- |
| `alias`     | string | 目录别名；空字符串表示当前目录。 |
| `file_name` | string | 文件名称。                       |
| `value`     | array  | 带字符串列名的待写入数据。       |
| `col_info`  | array  | 可选 DBF 字段结构定义。          |

返回：boolean

### 示例

范例01：基本用法

```tsl
data := `array("A": (1, 2, 3), "B": ("a", "b", "c"));
echo sysDbfWrite("", "example.dbf", data), "\n";
// 输出：1
```
