如何找到 ODBC driver-specific 参数
how to find ODBC driver-specific arguments
有没有办法以编程方式发现 ODBC 连接的命名参数?
例如,使用 "ODBC Driver 17 for SQL Server",ODBC 数据源管理器(在 Windows 中)允许使用 "Login ID" 和 "Password" 进行身份验证,但在以编程方式连接时,我们需要分别使用 uid=
和 pwd=
。这两个配置点在配置文档中明确列出(例如https://db.rstudio.com/databases/microsoft-sql-server/),但是driver支持的其他几个配置选项是less-或un-documented.
(对于 SQL 服务器,有更多文档,包括 https://docs.microsoft.com/en-us/sql/connect/odbc/windows/driver-aware-connection-pooling-in-the-odbc-driver-for-sql-server?view=sql-server-ver15,其中列出了其他几个参数(尽管不是它们可能的值)。这适用于 this driver,尽管由于此页面尚未针对 Driver 17 进行更新,我们必须假设所有选项均未更改。)
有编程方法可以了解哪些 driver 可用,以及哪些 pre-defined 数据源可用:
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
但没有发现连接参数。也许类似于这个 non-existent 函数:
discover_odbc_arguments("ODBC Driver 17 for SQL Server")
# [1] "Address" "AnsiNPW" "App"
# [4] "Database" "Encrypt" "PWD"
# [7] "Trusted_Connection" "TrustServerCertificate" "UID"
(我在这里使用 SQL 服务器作为示例,但我对更通用的方法感兴趣。并且由于我正在寻找编程机制,我宁愿避免阅读文档的建议每个 driver.)
(我不反对non-R方法。)
一些 non-R 尝试无效。使用 mssql odbc driver 库作为具有已知参数模式的示例。
$ 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>
您需要以某种方式调用 SQLBrowseConnect 函数来获取特定 ODBC 驱动程序或 DSN 的连接字符串的所有可用参数。不幸的是,正如我所见,此调用并未在 R ODBC 包中实现。有关详细信息,请参阅 link 中的文档和示例代码。
有没有办法以编程方式发现 ODBC 连接的命名参数?
例如,使用 "ODBC Driver 17 for SQL Server",ODBC 数据源管理器(在 Windows 中)允许使用 "Login ID" 和 "Password" 进行身份验证,但在以编程方式连接时,我们需要分别使用 uid=
和 pwd=
。这两个配置点在配置文档中明确列出(例如https://db.rstudio.com/databases/microsoft-sql-server/),但是driver支持的其他几个配置选项是less-或un-documented.
(对于 SQL 服务器,有更多文档,包括 https://docs.microsoft.com/en-us/sql/connect/odbc/windows/driver-aware-connection-pooling-in-the-odbc-driver-for-sql-server?view=sql-server-ver15,其中列出了其他几个参数(尽管不是它们可能的值)。这适用于 this driver,尽管由于此页面尚未针对 Driver 17 进行更新,我们必须假设所有选项均未更改。)
有编程方法可以了解哪些 driver 可用,以及哪些 pre-defined 数据源可用:
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
但没有发现连接参数。也许类似于这个 non-existent 函数:
discover_odbc_arguments("ODBC Driver 17 for SQL Server")
# [1] "Address" "AnsiNPW" "App"
# [4] "Database" "Encrypt" "PWD"
# [7] "Trusted_Connection" "TrustServerCertificate" "UID"
(我在这里使用 SQL 服务器作为示例,但我对更通用的方法感兴趣。并且由于我正在寻找编程机制,我宁愿避免阅读文档的建议每个 driver.)
(我不反对non-R方法。)
一些 non-R 尝试无效。使用 mssql odbc driver 库作为具有已知参数模式的示例。
$ 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>
您需要以某种方式调用 SQLBrowseConnect 函数来获取特定 ODBC 驱动程序或 DSN 的连接字符串的所有可用参数。不幸的是,正如我所见,此调用并未在 R ODBC 包中实现。有关详细信息,请参阅 link 中的文档和示例代码。