sql-server - ADO 再次执行 SQL Server 不报告参照完整性约束
问题描述
有证据表明,当使用 ADO 删除 SQL Server 中的记录时,它不会报告参照完整性约束。
- 主表:
tblMasterChecklist
- 子表:(
tblMasterTopic
参考tblmasterchecklist.checklistid
)
代码:
Dim ado As New adodb.Connection
Dim sConnectionString As String
ON error goto eh
sConnectionString = "Provider=SQLOLEDB;Data Source=hillhead-100;Initial Catalog=XXXXXXXX;UID=XXXXXXXXXXXXX;PWD=XXXXXXXXXXXX;"
ado.Open (sConnectionString)
ado.execute "DELETE FROM tblMasterChecklist WHERE ChecklistID = 'DE'"
我收到此错误:
错误 = 3001,应用程序错误 3001,参数类型错误、超出可接受范围或相互冲突。
只要不存在子记录,相同的命令就可以正常工作
这似乎是驱动程序的限制。
有人可以就此提出建议吗?
解决方案
一方面,不要使用SQLOLEDB
. 该驱动程序是 MDAC 的一部分,它可以方便地安装在自 Windows XP SP2 以来的所有 Windows 机器上,但也可以追溯到 Windows XP SP2,并且非常过时。它已被弃用,并且没有实现许多基本功能,例如支持“现代”数据类型,例如DateTime2
.
相反,请使用MSOLEDBSQL
SQL 服务器当前支持的唯一 OLEDB 提供程序。
您应该可以在此处下载最新版本。
或者,使用 ODBC 驱动程序,因为 ADO 支持 ODBC 和 OLEDB。
推荐阅读
- c# - 为什么我不能在我的测试中检测到这个异常
- oracle - 这个 Oracle 对象在哪里?
- rust - 添加泛型类型是函数的特征绑定时,为什么会出现“预期 8 个可能的标记之一”错误?
- visual-studio-code - VSCode Settings.json 为空
- slurm - SLURM 中的每个节点默认分区
- python - 无法在 Docker 中使用 python 从 GCS 存储桶中读取数据
- blazor - Blazor RenderTreeBuilder 中的事件
- shell - linux -- 创建一个目录结构,其中包含多个名称和空格
- javascript - 如何在 Node 中使用 React?
- asp.net - 您可以在代码隐藏中访问添加到 asp 页面的控件的 ID