VB6 ADODB 因 SQL Compact 失败:多步操作生成错误
Posted
技术标签:
【中文标题】VB6 ADODB 因 SQL Compact 失败:多步操作生成错误【英文标题】:VB6 ADODB Fails with SQL Compact: Multipe-Step operation generated errors 【发布时间】:2011-01-17 09:08:51 【问题描述】:我正在转换一个旧应用程序以使用 SQL Compact 数据库(它可以在 SQ Server 2005 和 2008 上正常工作),并且在尝试执行简单的选择命令时使用以下代码会出错:
Private Const mSqlProvider As String = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;"
Private Const mSqlHost As String = "Data Source=C:\database.sdf;"
Private mCmd As ADODB.Command ' For executing SQL'
Private mDbConnection As ADODB.Connection
Private Sub Command1_Click()
Dim DbConnectionString As String
DbConnectionString = mSqlProvider & _
mSqlHost
Set mDbConnection = New ADODB.Connection
mDbConnection.CursorLocation = adUseClient
Call mDbConnection.Open(DbConnectionString)
If mDbConnection.State = adStateOpen Then
Debug.Print (" Database is open")
' Initialise the command object'
Set mCmd = New ADODB.Command
mCmd.ActiveConnection = mDbConnection
End If
mCmd.CommandText = "select * from myTable"
mCmd.CommandType = adCmdText
mCmd.Execute ' FAILS HERE! '
End Sub
我在项目中引用了 Microsoft ActiveX 数据访问对象 6.0 库。
我得到的错误是:
运行时错误 -2147217887 (80040e21)
多步操作产生错误。检查每个状态值
只是想知道是否有人有任何建议?
谢谢
【问题讨论】:
【参考方案1】:现在开始工作了:
变化
mDbConnection.CursorLocation = adUseClient
到
mDbConnection.CursorLocation = adUseServer worked!
【讨论】:
接受这个答案是有意义的,因为它解决了问题。【参考方案2】:我不能 100% 确定错误来自此代码,而不是它之后的内容,这是“最后一个已知的正确”类型位置。最常见的错误原因:
您正在将数据隐式转换为错误的数据类型(例如,正在将 alpha 字符串值插入到数字字段中。)
您正在插入格式错误的值(通常最常发生在日期上)
一个空值被插入到一个不允许空值的字段中。
您的值已超过字段的最大长度。 (例如,在 10 个字符的字段中粘贴 50 个字符长的字符串)
此外,如果连接未打开,也不会出现任何错误。
【讨论】:
【参考方案3】:这个问题和这两个很相似:
What is this ‘Multiple-step OLE DB’ error? Multiple-step OLE DB operation generated errors这将是以下三件事之一:
连接字符串(您使用的是什么驱动程序?) 安全性(使用集成安全性而不是用户名/密码) 或如贝利兹所说,光标位置【讨论】:
以上是关于VB6 ADODB 因 SQL Compact 失败:多步操作生成错误的主要内容,如果未能解决你的问题,请参考以下文章
使用SQL Server 2012的Windows 10 64位ADODB连接失败
无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型