证据是,当使用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 Server当前唯一支持的OLEDB提供程序。
您应该能够下载最新版本here。
或者,使用ODBC驱动程序,因为ADO支持ODBC和OLEDB。
sConnectionString =“ Provider = MSOLEDBSQL;数据源= xxxxxxxxxxxx;初始目录= xxxxxxxxxxxxx; UID = xxxxxxxxxxx; PWD = xxxxxxxxxxxx;”