ADODB Conn 和 Recordsets 错误

Error with ADODB Conn and Recordsets

我收到此错误:“ 无法更改以 Command 对象作为其源的 Recordset 对象的 ActiveConnection 属性。”当尝试打开记录集时。我应该注意一件事:此过程在编写为内联时有效 SQL,但由于显而易见的原因被删除。

我读到过,在我使用的存储过程上设置 'nocount on' 可以解决这个问题,但事实并非如此。所以,希望你们能帮帮我。

这是正在初始化的连接:

Dim objConn As ADODB.Connection
sConn = System.Configuration.ConfigurationManager.ConnectionStrings("ConnString").ConnectionString()
    objConn = CreateObject("ADODB.Connection")
    objConn.ConnectionString = sConn
    objConn.CursorLocation = ADODB.CursorLocationEnum.adUseServer
    objConn.Open(sConn)

然后:

cmd = New ADODB.Command()
cmd.ActiveConnection = objConn

cmd.CommandText = "someProc"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
cmd.NamedParameters = True

cmd.Parameters.Append(cmd.CreateParameter("SomeID", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 20, params("SomeID")))

objRec = New ADODB.Recordset()
objRec.Open(cmd, objConn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

以前有人遇到过这种情况吗?提前致谢。

我已经有一段时间没有使用 ADO(当然从来没有在 .NET 中使用过),所以这是一个猜测,但是来自 the documentation for Open:

If you pass a Command object in the Source argument and also pass an ActiveConnection argument, an error occurs. The ActiveConnection property of the Command object must already be set to a valid Connection object or connection string.

所以,听起来您的问题是您正在将连接传递给 objRec.Open 调用。由于该参数是可选的,因此请尽量不要传递它。我不确定你是传递 Nothing 还是省略参数,所以试试:

objRec.Open(cmd, , ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

如果不喜欢,试试:

objRec.Open(cmd, Nothing, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)