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)
我收到此错误:“ 无法更改以 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)