我正在使用 Db2 CLI/ODBC API 接口进行编码。视窗 10
如果我在连接字符串中提供用户名和密码(UID / PWD)键,我可以使SQLDriverConnect函数正常工作,并且可以连接到任何本地或远程数据库。这部分工作正常。
前任。如果我的连接字符串类似于"DSN=SAMPLE;UID=xxxxx;PWD=yyyyy"
,则连接工作正常。
但是根据文档,Db2 应该支持隐式本地连接(当应用程序与数据库服务器在同一主机上运行时),并且您应该能够在不提供用户/密码信息的情况下连接到本地数据库。
服务器代码检测连接是本地的还是远程的。对于本地连接,当验证是 SERVER 时,验证成功不需要用户 ID 和密码。
db2 connect to sample
在本地,使用 CLP CONNECT 命令,它也可以在不传递密码的情况下隐式工作。这证明服务器配置正确。(身份验证设置为 SERVER)
但是,当使用应用程序 CLI 代码尝试相同的方法时,如果我只在连接字符串中提供 DSN(数据库名称),我会收到 SQL30082N 原因 3 PASSWORD MISSING 错误。我尝试了几种变体,例如:
DSN=SAMPLE;
DSN=SAMPLE;UID=;PWD=;
DSN=SAMPLE=UID=;
DSN=SAMPLE=UID='';PWD='';
DSN=sample; UID=; PWD=; AUTOCOMMIT=0; CONNECTTYPE=1;
它们都以相同的 SQL 状态失败。密码丢失。
我错过了什么?
--- PS ----
只是为了测试,我可以使用不同的编程接口使这项工作正常,例如使用 IBM.Data.Db2 .Net 提供程序的 Powershell
# $dbFactory = [System.Data.Common.DbProviderFactories]::GetFactory('IBM.Data.DB2')
# $connection = $dbFactory.CreateConnection()
# $connection.ConnectionString = "Database=SAMPLE"
# $connection.Open()
# $connection
...
ConnectionString : Database=SAMPLE
Database : SAMPLE
IsOpen : True
...
DataSource : SAMPLE
UserId : Samuel
ClientUser :
ClientWorkStation : Samuel-ALW
InternalClientWorkStation : Samuel-ALW
...
我来自 powershell 的隐式连接在 db2 db 中列为应用程序:
# db2 list applications for db sample
Auth Id Application Appl. Application Id DB # of
Name Handle Name Agents
-------- -------------- ---------- -------------------------------------------------------------- -------- -----
SAMUEL powershell.exe 5316 *LOCAL.DB2.210103171916 SAMPLE 1
为什么使用SQLDriverConnect在CLI中不起作用?