0

.sdf经过数小时的头痛后,我设法使用以下连接字符串使用 adodbapi 使用 Python连接到数据库文件:

Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;
Data Source={};
ssce:Database Password='{}';

只是陷入这种愚蠢的......情况......

选择将适用于除 B 列之外的任何其他列

select * from table_name << crashes

select A, B from table_name << crashes

select A, C from table_name << works

select B from table_name << crashes

所以它必须与该数据有关,因为使用 sdfBrowser 相同的查询可以正常工作。

回溯(最近一次通话最后):

_execute_command 记录集中的文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\adodbapi\adodbapi.py”,第 676 行
,count = self.cmd.Execute()

文件“”,第 2 行,在执行

文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\win32com\client\dynamic.py”,第 271 行,在ApplyTypes
result = self. oleobj .InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)

pywintypes.com_error: (-2147352567, '发生异常。', (0, 'Microsoft Cursor Engine', '多步操作产生错误。检查每个状态值。', None, 0, -2147217887), None)

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次通话最后):


cursor.execute(q)中的文件“d:\data.py”,第 63 行

文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\adodbapi\adodbapi.py”,第 869 行,在执行
self._execute_command()


_execute_command self._raiseCursorError(klass, _message)中的文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\adodbapi\adodbapi.py”,第 684 行


_raiseCursorError eh(self.connection, self, errorclass, errorvalue)中的文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\adodbapi\adodbapi.py”,第 557 行

文件“C:...PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\adodbapi\apibase.py”,第 50 行,在标准错误处理程序中
引发错误类(错误值)

adodbapi.apibase.DatabaseError: (-2147352567, 'Exception occurred.', (0, 'Microsoft Cursor Engine', '多步操作产生错误。检查每个状态值。', None, 0, -2147217887), None)

命令:

从 [table_name] 中选择 A,B

参数:
[]

有什么建议么?

4

1 回答 1

0

对于 TEXT 和 IMAGE 类型的列,桌面 OLEDB 提供程序是“无用的”。

解决方法:将列类型更改为 nvarchar(4000),跳过该列,使用 C# 库访问 SQL CE 数据库。

文档不再可用,因为不再支持 SQL Compact 3.5。

但 SQL CE 4.0 文档可在此处获得:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2012/ms173053(v=sql.110)

于 2020-12-07T07:07:31.380 回答