在.NET程序集中向ADODB命令添加参数时出错

时间:2011-01-27 15:52:00

标签: .net asp-classic assemblies adodb consumption

我有一个由传统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未处理
  消息= System.InvalidCastException:   无法转换类型的COM对象   'System .__ ComObject'到类类型   'ADODB.InternalParameter'。实例   表示COM组件的类型   不能转换为不支持的类型   代表COM组件;但他们   只要可以转换为接口   底层COM组件支持   QueryInterface调用IID   界面。

在线:

.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

2 个答案:

答案 0 :(得分:7)

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

2.7 - 返回“ADODB.InternalParameter”(由ADODB.Command对象预期)

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

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

感谢Chris Behrens帮助我缩小搜索范围。

答案 1 :(得分:0)

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