3

我有一个经典 ASP 页面正在使用的 .NET 程序集。我创建了一个返回 ADODB 记录集的方法。在我的 ADODB 命令对象中,我使用以下格式向 adCmdStoredProc CommandType 属性提供参数...

With ADODBCmd 
.ActiveConnection = ADODBConn
.Prepared = True
.CommandType = CommandTypeEnum.adCmdStoredProc
.NamedParameters = True
.CommandText = Sql_GetMyBook   
.Parameters.Append(.CreateParameter("@book", DataTypeEnum.adChar, ParameterDirectionEnum.adParamInput, 50, MyBook))
End With

我收到一个铸造错误...

System.Exception 未处理
Message=System.InvalidCastException:无法将类型为“System.__ComObject”的 COM 对象转换为类类型“ADODB.InternalParameter”。表示 COM 组件的类型的实例不能转换为不表示 COM 组件的类型;但是,只要底层 COM 组件支持对接口的 IID 的 QueryInterface 调用,它们就可以转换为接口。

在线:

.Parameters.Append(.CreateParameter("@book", DataTypeEnum.adChar, ParameterDirectionEnum.adParamInput, 50, MyBook))

有任何想法吗?

存储过程:

ALTER PROCEDURE [dbo].[GetMybook]
    -- Add the parameters for the stored procedure here
    @book char(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT BookTitle, Author, PulishedDate
    FROM        Library
    WHERE       BookTitle=@book
4

2 回答 2

7

Microsoft ActiveX 数据对象库中“.CreateParameter”方法的返回值之间存在差异(无意或无意)

2.7 - 返回“ADODB.InternalParameter”(这是 ADODB.Command 对象所期望的)

2.8 - 返回“System.__ComObject”(ADODB.Command 无法处理或不知道如何处理)

出于我的目的,我必须将我的引用从 2.8 库更改为 2.7 库,以便将创建的参数附加到命令对象。

感谢 Chris Behrens 帮助我缩小了对解决方案的搜索范围。

于 2011-01-27T19:11:55.020 回答
0

我认为这与“MyBook”的价值有关。从数据类型来看,我们应该期望它是单个字符,但错误消息似乎表明它是一个成熟的 COM 对象。也许它应该类似于“MyBook.Id”?

于 2011-01-27T15:57:41.293 回答