用连字符名连接到Sql Server数据库

问题描述:

我似乎无法找到一种方法来转义这个连字符的数据库名称,以便我可以打开它的连接。该数据库名是EDMS-Lok和我的代码看起来像这样(ADOcon是一个ADO连接对象):用连字符名连接到Sql Server数据库

strConBase="DRIVER=SQL Server;SERVER=LOKDB;UID=secret;PWD=secret;APP=LokENG_TESTS;WSID=LOKSPEC1;DATABASE=[EDMS-Lok];Network=DBMSSOCN;Trusted_Connection=NO; 
ADOcon.ConnectionString = strConBase 
ADOcon.Open" 

我已经试过数据库名称不封闭支架。我试着将它放在方括号,大括号,括号,备注,单引号,双引号等内。我尝试了反斜杠和感叹号。我无法找到一种方法来转义数据库名称,以便我可以连接到它。

该错误消息我得到的是:
Run-time error '-2147467259 (80004005)': [Microsoft][ODBS SQL Server Driver][SQL Server]Cannot open database "[EDMS-Lok]" requested by the login. The login failed.

数据库名称和凭据是正确的。我可以访问它,如果我从连接字符串中省略数据库名称参数,然后在我的SQL语句中使用完全限定名称(即SELECT * FROM [EDMS-Lok].dbo.tablename

但是,我真的不想这样做, m试图使用在多个数据库上执行相同操作的模块化代码。我想要的是打开到一个数据库的连接,运行一些SQL过程,关闭连接,然后打开到另一个数据库的连接并运行相同的SQL过程。泡沫,冲洗,重复。

此外,有人问之前,我没有选择更改数据库名称。

作为一个测试,我使用完全相同的连接字符串连接到服务器上的另一个数据库没有一个连字符的名称,它的工作没有错误,所以我很确定这是愚蠢的连字符名称是问题。

+1

你为什么使用'Driver = SQL Server'?请尝试将其保留或使用SQLNCLI。 (或者更好的办法是停止命名带有麻烦字符的数据库。) – 2014-10-29 15:20:14

+0

嗨,Aaron,我正在使用'SQL Server'驱动程序,因为那就是我在connectionstrings.com上列出的服务器列表。我一回到办公室就会尝试你的建议。不幸的是,我正在使用现有的数据库,并没有选择更改名称,必须与其他人开始工作。 – CBRF23 2014-10-29 16:52:12

+0

亚伦,我试着省略驱动程序语句并使用您建议的SQL本地客户端驱动程序。当我这样做时,我得到一个“未找到数据源并且没有指定默认驱动程序”的错误。 – CBRF23 2014-10-29 17:12:26

我无法通过使用MSDASQL提供程序的ODBC连接来按照我想要的方式工作。

我跑了一些测试,我似乎可以通过使用SQLOLEDB提供程序通过OLE DB连接。所以,我想我会回头修改现有代码以使用OLE DB连接。

使用OLE DB,我发现我可以离开数据库名非转义,即INITIAL CATALOG=EDMS-Lok;或者我可以逃避使用双引号,即INITIAL CATALOG="EDMS-Lok";。然而,方括号在我尝试它们时抛出了一个错误,所以现在我会坚持使用双引号或未经转义的数据库名称。

谢谢!