使用adodbapi连接到SQLServer 2005

2024-09-27 07:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生,我在Win 7-32工作站上安装了Python 3.2。正在尝试使用adodbapi-2.4.2.2(该包的最新更新)连接到MSSQLServer2005服务器。

代码/连接字符串如下所示:

conn=adodbapi.connect('Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XXX;Data Source=123.456.789');

从adodbapi我不断得到错误(这是来自Wing IDE shell的完整错误消息):

回溯(最近一次调用时间): 文件“D:\ Program Files\Wing IDE 4.0\src\debug\tserver_sandbox.py”,第2行,在 如果名称='main': 文件“D:\ Python32\Lib\site packages\adobapi\adobapi.py”,第298行,在connect中 可能是COM错误 adodbapi.adodbapi.InterfaceError:

我可以跟踪代码并在异常发生时看到它。

我还尝试将conn字符串与OLEDB提供程序和集成的Windows安全性一起使用,结果相同。

所有这些连接字符串在我的工作站上的UDL文件和SSMS中都可以正常工作,但在adodbapi中都会失败,并出现相同的错误。

我该怎么解决?


Tags: 文件字符串代码pyconnect错误connide
3条回答

我也遇到了同样的问题,我跟踪到加载win32com.pyd失败,因为有些系统dll不在“dll加载路径”中,例如msvcp100.dll

我通过将这些dll中的很多(可能太多)复制到C:\ WinPython-64bit-3.3.3.2\python-3.3.3.amd64\Lib\site packages\win32解决了这个问题

如果其他人发现这个线程正在寻找一个与我在Python2.7中看到的类似错误的解决方案:

Traceback (most recent call last):
  File "get_data.py", line 10, in <module>
    connection = get_connection(r"XXX\YYY", "DB")
  File "get_data.py", line 7, in get_connection
    conn = adodbapi.connect(connstring)
  File "C:\Python27\lib\site-packages\adodbapi\adodbapi.py", line 116, in connect
    raise api.OperationalError(e, message)
adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",), 'Error opening connection to "Data Source=XXX\\YYY; Initial Catalog=DB; Provider=SQLOLEDB.1; Integrated Security=SSPI"')

在我的例子中,简单的解决方案是从这里安装Python for Windows扩展(pywin32): http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/

尝试此连接字符串:

Initial Catalog=XXX; Data Source=<servername>\\<SQL Instance name>; Provider=SQLOLEDB.1; Integrated Security=SSPI

更新

嗯,好吧。在查看adodbapi的源代码时,我不得不说您遇到了一个COM错误。(是的,我知道回溯说的)。但特别是初始化相关的COM对象。

这意味着连接字符串与回溯无关。我认为一个好的开始是确保你的pythoncom副本是最新的。

可能win32com/pythoncom还不支持Python 3K(3.0以后的版本),但是经过一分钟的搜索,我还没有发现任何有用的东西,我将把它留给您。

当您修复了问题后,此代码应该能够成功运行(并且应该在此时失败)。

import win32com.client
import pythoncom
pythoncom.CoInitialize()
win32com.client.Dispatch('ADODB.Connection')

同样,代码抛出的任何异常都有助于调试问题。

相关问题 更多 >

    热门问题