有没有一种编程的方法可以发现ODBC连接的命名参数?例如,使用“ODBC Driver 17 for SQL Server”,ODBC数据源管理员(在Windows中)允许使用“登录ID”和“密码”进行身份验证,但是当以编程方式连接时,我们需要分别使用uid=
和pwd=
。这两个配置点在配置文档中明确列出(例如:https://db.rstudio.com/databases/microsoft-sql-server/),但是驱动程序支持的其他几个配置选项未经记录或未记录完全。
(对于SQL Server,还有更多的文档,包括https://learn.microsoft.com/en-us/sql/connect/odbc/windows/driver-aware-connection-pooling-in-the-odbc-driver-for-sql-server?view=sql-server-ver15,列出了几个其他参数(尽管没有它们的可能值)。这适用于此驱动程序,但由于此页面尚未更新为Driver 17,因此我们必须假定所有选项都未更改。)
有编程方法来了解可用的驱动程序和预定义的数据源:
odbc::odbcListDrivers()
# name attribute value
# ...truncated...
# 33 ODBC Driver 17 for SQL Server UsageCount 1
# 34 ODBC Driver 17 for SQL Server APILevel 2
# 35 ODBC Driver 17 for SQL Server ConnectFunctions YYY
# 36 ODBC Driver 17 for SQL Server CPTimeout 60
# 37 ODBC Driver 17 for SQL Server DriverODBCVer 03.80
# 38 ODBC Driver 17 for SQL Server FileUsage 0
# 39 ODBC Driver 17 for SQL Server SQLLevel 1
odbc::odbcListDataSources()
# name description
# 1 somedb ODBC Driver 17 for SQL Server
# 2 SQLite3 Datasource SQLite3 ODBC Driver
但没有发现连接的关联参数。也许类似于此不存在的函数:
discover_odbc_arguments("ODBC Driver 17 for SQL Server")
# [1] "Address" "AnsiNPW" "App"
# [4] "Database" "Encrypt" "PWD"
# [7] "Trusted_Connection" "TrustServerCertificate" "UID"
(我在这里以SQL Server为例,但我对更一般的方法感兴趣。由于我正在寻找编程机制,我更喜欢避免建议阅读每个驱动程序的文档。)
(我不排斥非R方法。)
一些未能成功的非R尝试。使用一个已知参数模式的mssql odbc驱动程序库作为示例。
$ strings /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1 \
| egrep -i 'Trusted.Conn|AnsiDPW|TrustServer'
### <no output>
$ grep -rli 'Trusted.Conn|AnsiDPW|TrustServer' /opt/microsoft/msodbcsql17/
### <no output>
RODBC
与odbc
的评论(已删除的答案)。我认为这并不重要:它的文档甚至说:“支持哪些字段是特定于驱动程序的(而且很难找到文档)”,这表明作者不知道编程发现(或者至少没有深入研究)。我担心这个问题主要只是确认ODBC作为协议不支持这个概念。再次感谢。 - r2evans