【问题标题】:adodbapi SQL Server CE query crashes when selecting a specific columnadodbapi SQL Server CE 查询在选择特定列时崩溃
【发布时间】:2020-12-06 18:39:17
【问题描述】:

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

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 相同的查询可以正常工作。

Traceback(最近一次通话最后一次):

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

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

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

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

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

Traceback(最近一次通话最后一次):

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

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

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

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

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

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

命令:

从 [table_name] 中选择 A,B

参数:
[]

有什么建议吗?

【问题讨论】:

  • 到目前为止,我设法发现 B 列中的某些值包含双引号,但我不知道如何缓解此问题
  • 附带问题:D Microsoft SQL Server Compact 3.5 的完整语言文档在哪里?

标签: python-3.x adodbapi


【解决方案1】:

桌面 OLEDB 提供程序对于 TEXT 和 IMAGE 类型的列是“不合格的”。

解决方法:将列类型更改为 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)

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多