【问题标题】:How do i correctly query a sql ce 4.0 database file using adodbapi?如何使用 adodbapi 正确查询 sql ce 4.0 数据库文件?
【发布时间】:2013-11-16 16:46:54
【问题描述】:

我有以下方法:

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(query) 上出现以下错误:

(<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安装成功。连接字符串似乎工作——我可以连接并得到一个游标就好了)

【问题讨论】:

    标签: python sql-server-ce adodbapi


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

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

      conn.adoConn.CursorLocation = adodbapi.adUseServer
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多