Files
playbook/skills/tsl-api-reference/references/codegen/module/tinyodbc.md
T
2026-08-14 17:15:41 +08:00

3.4 KiB

第三方交互 / TinyODBC

TinyODBC 是遵循 ODBC 3.5 的外部驱动,用于让支持 ODBC 的客户端执行 TSL 并读取结果集

TinyODBC 本身不是可由 TSL 直接调用的顶级 function、class 或 unit。本页记录驱动级能力,不新增 TSL API 条目

驱动接口范围

驱动支持以下 ODBC 接口:

  • 句柄与连接:SQLAllocHandleSQLConnectSQLFreeHandleSQLFreeStmtSQLSetConnectAttrSQLGetConnectAttr
  • 语句执行:SQLExecDirectSQLPrepareSQLExecuteSQLBindParameterSQLNumParamsSQLEndTran
  • 结果读取:SQLBindColSQLFetchSQLFetchScrollSQLGetDataSQLMoreResultsSQLNumResultColsSQLRowCountSQLSetPos
  • 元数据与诊断:SQLColAttributeSQLColumnsSQLDescribeColSQLGetDescFieldSQLGetDiagFieldSQLGetDiagRecSQLGetFunctionsSQLGetInfoSQLGetStmtAttrSQLGetTypeInfoSQLStatisticsSQLTables

这些名称属于标准 ODBC C API;此处仅列出支持范围,不补写未公开的完整 C 原型、参数或返回类型

TSL 类型映射

ODBC 类型 TSL 类型 说明
SQL_BIGINT TSL_TINT64 64 位整数
SQL_BINARY TSL_TBINARY 二进制数据
SQL_DOUBLE TSL_TNUMBER 64 位浮点数
SQL_INTEGER TSL_TINT 32 位整数
SQL_VARCHAR TSL_TSZSTRING ANSI 或 Unicode 字符串
SQL_TIMESTAMP TSL_TNUMBER 由 DSN 日期时间规则识别的 TSL 数值

DSN 配置项

配置项 说明
DSN 数据源名称
HOST / PORT 天软服务器地址和端口
USERNAME / PASSWORD 登录账号与密码
DATETIMECOLUMNAUTO 是否自动识别日期时间列
DATETIMECOLUMNLIST 强制按日期时间处理的列名或列号列表
DATETIMECOLUMNREGEXP 日期时间列名正则表达式
TASKADMINROW TaskAdmin 字符串按一行或多行返回
CONNECTPROXY 是否通过代理服务器连接
PROXYADDRESS / PROXYPORT 代理服务器地址和端口
PROXYUSER / PROXYPASS 代理服务器用户名和密码

调用案例

Python 参数调用

import pyodbc

connection = pyodbc.connect("dsn=t1")
cursor = connection.cursor()
cursor.execute(
    "setsysparam(pn_stock(), {?}); "
    "setsysparam(pn_date(), today()); "
    "return nday({?}, 'date', datetimetostr(sp_time()), "
    "'open', open(), 'close', close());",
    "SZ000002",
    30,
)
rows = cursor.fetchall()
cursor.close()
connection.close()
print(rows)

R 调用

library(RODBC)

channel <- odbcConnect("t1")
sql_text <- paste0(
  "setsysparam(pn_stock(),'SZ000002'); ",
  "setsysparam(pn_date(),today()); ",
  "return nday(30,'date',datetimetostr(sp_time()),",
  "'open',open(),'close',close());"
)
result <- sqlQuery(channel, sql_text)
odbcClose(channel)
print(result)