使用Excel VBA中的ADO通过网络连接SQL Server

4
我需要从网络上的另一台计算机连接到运行在我的笔记本上的SQL Server数据库。 我既要使用C#应用程序,也要使用VBA宏进行连接。 它们在我的笔记本上都可以运行得很好,而C#应用程序在网络上也可以完美运行。 但是,我无法使用VBA通过网络连接。 这是我的连接字符串:
ConnectionString =“ Driver = {SQL Server};Server = MY-LAPTOP; DAtabase = SAFEXlive; UID = MyUsername; PWD = MyPassword”
除了“Driver = {SQL Server}”之外,这与我在C#应用程序中使用的连接字符串相同,后者可以正常工作。
然后,我正在使用以下代码(在VBE中引用Microsoft ActiveX Data Objects 6.0 Library)打开连接:
Dim oConnection As Connection
Set oConnection = New Connection
oConnection.ConnectionString = strConnectionString
oConnection.Open

如果我在我的笔记本电脑上运行它,它可以正常工作,但是如果我在网络上的另一台计算机上运行它,我会收到以下错误:“Run-time error '-2147217843 (80040e4d) [Microsoft][ODBC Server Driver][SQL Server]Login failed for user...”,并且指定的用户是计算机的Windows登录用户。

我需要在代码或Excel中设置一些安全设置吗?或者我构建连接字符串时有错误吗?我做错了什么?


虽然我不确定是什么原因导致了您的错误,但我可以说,我不认为您的连接字符串有任何问题。您似乎已经成功连接,但服务器正在拒绝您的登录。 - Pynner
它告诉我用户是Windows登录... 你有什么想法可以解决这个问题吗?我认为问题在于它正在尝试使用Windows登录而不是连接字符串中的UID和密码连接到SQL Server - 我错了吗? - Dan
也许这可以帮助你,但只是猜测:http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/1bb10896-27ed-4469-81e0-a84f4fba68c9 - Fionnuala
谢谢您的评论 - 但我不确定您在建议什么。那个问题使用C#应用程序使用集成安全性进行连接。我需要使用与集成安全性相反的内容从Excel应用程序进行连接。您是在说这可能是防火墙问题吗...? - Dan
经过进一步的思考,我想知道VBA驱动程序接口是否尝试使用某种级别的Windows文件共享类型安全性。另一台计算机是否具有对笔记本电脑的完全访问权限? - Pynner
@Pynner,我觉得这是正确的方向。看起来因为我的用户名前有一个空格,它决定使用Windows安全性。非常令人沮丧。 - Dan
2个回答

4

问题已解决。答案相当令人恼火。实际上问题出在连接字符串中的UID处。信不信由你,只需将...UID= MyUsername;...更改为..UID=MyUsername;...,即删除空格字符,就可以了!谢谢您的建议。


1
我相信,那就是我的答案。 - Russell Hart
1
你的回答将Driver={SQL Server}更改为Provider=SQLOLEDB,这比空格更明显,但对我没有起作用。 - Dan
下次使用 Trim() 函数 ;) - user2140173

3
尝试使用这个连接字符串:
ConnectionString = "Provider=SQLOLEDB;Data Source=MY-LAPTOP;Initial Catalog=SAFEXlive;User ID=MyUsername;Password=MyPassword"

这是一个AD域登录吗?请确保在用户名后附加了域名,例如domain\user。 我建议使用集成安全性代替此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接