【发布时间】:2014-12-24 06:23:39
【问题描述】:
我想在不使用 DSN 的情况下连接到 SQL Server 数据库。尝试连接到所述数据库时收到错误消息。错误是
运行时错误“-2147467259 (80004005)”:[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序
我的连接字符串如下所示:
"ODBC;DRIVER=SQL Server;SERVER=lokdb; UID=secret;PWD=secret;APP=Microsoft Open Database Connectivity;WSID=" & Environ$("COMPUTERNAME") & ";Network=DBMSSOCN;Trusted_Connection=Yes;DATABASE=EDMS-Lok"`
如果我从连接字符串中删除 DATABASE=EDMS-Lok 参数,我可以使用指定的凭据连接到服务器上的默认数据库,但是我似乎无法“找到”EDMS-Lok数据库。例如。如果我尝试使用
SELECT * FROM EDMS-Lok.dbo.eng_dwg
我收到一条错误消息
运行时错误“-2147217900 (80040e14)”:[Microsoft][ODBC SQL Server Driver][SQL Server]“-”附近的语法不正确
(eng_dwg 是一个有效的表)
当我在未指定数据库的情况下进行连接时,ADO 连接对象的.DefaultDatabase 属性返回“020”,我什至看不到该服务器上的可用数据库?
连接后,如果我使用SELECT name FROM sys.databases,我可以获得可用数据库的列表。他们是:
- 010
- 100
- 500
- EDMS-乐
- 大师
- msdb
- MSLLockDB
- 酒吧
- 临时数据库
我使用 DSN 让它工作,但我不想使用 DSN。
不知道这里有什么问题??
【问题讨论】:
-
您是否尝试将数据库名称包含在 [ ] ... 中,例如 DATABASE=[EDMS-Lok]
-
我刚刚做了,并取得了部分成功。我首先尝试将数据库名称包装在连接字符串中,即
DATABASE=[EDMS-Lok],但这不起作用(同样的错误)。但是,如果我在不指定数据库的情况下进行连接,我可以使用SELECT * FROM [EDMS-Lok].dbo.eng_dwg访问表因此,部分成功 - 知道为什么它在 select 语句中有效,但在连接字符串中无效吗?另外,我意识到我将TrustedConnection参数设置为YES,并且我试图指定凭据,所以我将其更改为NO。 -
它在连接字符串中不起作用,因为该字符串不是 T-SQL 代码。要使其正常工作,您可能需要弄清楚如何转义破折号字符。
-
山姆,这很有道理 - 谢谢!
标签: sql-server database vba database-connection connection-string