3.4 KiB
3.4 KiB
第三方交互 / TinyODBC
TinyODBC 是遵循 ODBC 3.5 的外部驱动,用于让支持 ODBC 的客户端执行 TSL 并读取结果集
TinyODBC 本身不是可由 TSL 直接调用的顶级 function、class 或 unit。本页记录驱动级能力,不新增 TSL API 条目
驱动接口范围
驱动支持以下 ODBC 接口:
- 句柄与连接:
SQLAllocHandle、SQLConnect、SQLFreeHandle、SQLFreeStmt、SQLSetConnectAttr、SQLGetConnectAttr - 语句执行:
SQLExecDirect、SQLPrepare、SQLExecute、SQLBindParameter、SQLNumParams、SQLEndTran - 结果读取:
SQLBindCol、SQLFetch、SQLFetchScroll、SQLGetData、SQLMoreResults、SQLNumResultCols、SQLRowCount、SQLSetPos - 元数据与诊断:
SQLColAttribute、SQLColumns、SQLDescribeCol、SQLGetDescField、SQLGetDiagField、SQLGetDiagRec、SQLGetFunctions、SQLGetInfo、SQLGetStmtAttr、SQLGetTypeInfo、SQLStatistics、SQLTables
这些名称属于标准 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)