在 Windows 7 上使用adodbapi
2.6 包时,当向 SQL 查询传递多个参数时,Python 将崩溃(生成“Python 已停止工作”弹出窗口)。我正在尝试将参数传递给 ADO 连接游标以查询 SQL Server Compact 数据库 (.sdf)。
我也尝试过正常的字符串格式,它工作正常,但根据许多 stackoverflow 讨论是一个安全漏洞。
我的代码如下:
import adodbapi as ado
#connection provider
provider = "Microsoft.SQLSERVER.CE.OLEDB.4.0"
#database location path
filePath = "results.sdf"
#max size of database file in MB
maxSize = "4000"
#combine into connection string
connectionString = ("Provider = {}; Data Source = {}; SSCe:Max Database Size = {}"
.format(provider, filePath, maxSize))
#create connection
dbConnection = ado.connect(connectionString)
#create cursor
cursor = dbConnection.cursor()
cursor.execute("--THE QUERIES DESCRIBED BELOW--") #**** location of fault****
print(cursor.fetchall().ado_results)
cursor.close()
传递一个参数可以正常工作,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE MeasurementId >= ?", (11774,))
并且执行非参数化查询工作正常,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE (MeasurementId >= 11774 AND MeasurementId <= 11779)")
但是,当使用两个参数尝试完全相同的查询时,它会使 python 崩溃,并且在编辑器中没有生成错误消息,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE (MeasurementId >= ? AND MeasurementId <= ?)", (11774, 11779))
从命令提示符(在 Windows 7 中)运行文件时,这会生成一个弹出窗口,声称“Python 已停止工作”,其中包含一堆信息,包括:
Problem Event Name BEX64
Application Name: python.exe
Fault Module Name: MSVCR90.dll
Fault Module Version: 9.0.30729.6161
Exception Code: c0000417
OS Version: 6.1.7601.2.1.0.256.4
然后进程退出(在 JupyterLabs/VSCode 上尝试时,它会冻结内核)
我尝试将参数作为列表传递,使用不同的参数样式(格式和命名,尽管我认为 adodbapi 将这一切都转换回标准 qmark 格式),更改光标设置和不同的多参数查询,所有这些都具有相同的结果。
这是正确使用参数传递吗?我知道您不应该传递表或列名,但这似乎是一个正确的查询,应该可以正常执行。