如何使用adodbapi正确查询sql ce 4.0数据库文件?

时间:2013-11-16 16:46:55

标签: python sql-server-ce adodbapi

我有以下方法:

def open(self, filename):
    if not os.path.exists(filename):
        raise IOError("Cannot find Game Database file {0}").__format__(filename)

    connstr = "Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0; 
               Data Source={0};".format(filename)
    conn = adodbapi.connect(connstr)
    curs = conn.cursor()
    query = "Select * from Patient;"
    curs.execute(query)
    results = curs.fetchall()
    for r in results:
        print r

运行此命令时,会在curs.execute(查询)上发出以下错误:

(<class 'adodbapi.adodbapi.DatabaseError'>, u"(-2147352567, 'Exception occurred.', (0, u'Microsoft Cursor Engine', u'Multiple-step operation generated errors. Check each status value.', None, 0, -2147217887), None)\nCommand:\nSelect * from Patient;\nParameters:\n[]")

我可以在compactView中成功运行此确切查询。

我没看到什么明显的语法糖? (运行:win7 pro x64,python 2.7.x,pywin32和adodbapi安装成功。连接字符串似乎工作 - 我可以连接并获得光标就好了)

2 个答案:

答案 0 :(得分:1)

可能是您选择的某个表列是NVARCHAR(N)类型,其中N大于127 [1]。使用服务器端游标将解决问题。

conn.adoConn.CursorLocation = adodbapi.adUseServer

答案 1 :(得分:1)

使用adodbapi-2.6.0.7我使用以下方法解决了这个问题:

connection.connector.CursorLocation = 2

例如:

import adodbapi

file = r'FILEPATH'
connection_string = (
    'Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5; Data Source={};'.format(file))
print(connection_string)
connection = adodbapi.connect(connection_string)
connection.connector.CursorLocation = 2
connection.get_table_names()
相关问题