Ошибка при добавлении параметров в команду ADODB в сборке .NET - PullRequest
3 голосов
/ 27 января 2011

У меня есть сборка .NET, которая используется классической страницей ASP. Я создал метод, который возвращает набор записей 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 ]

7 голосов
/ 27 января 2011

Существует различие (непреднамеренное или нет) между возвращаемым значением метода ".CreateParameter" в библиотеке объектов данных Microsoft ActiveX.

2.7 - возвращает «ADODB.InternalParameter» (что ожидается объектом ADODB.Command)

2.8 - Возвращает "System .__ ComObject" (который ADODB.Command не может обработать или не знает, что делать)

В моих целях мне пришлось изменить ссылку на библиотеку с 2.8 на 2.7, чтобы добавить параметры, созданные в объект команды.

Спасибо Крису Беренсу за помощь в сужении моего поиска решения.

0 голосов
/ 27 января 2011

Я думаю, что это связано со значением «MyBook».Мы должны ожидать, что это будет один символ от типа данных, но сообщение об ошибке, похоже, указывает на то, что это полноценный COM-объект.Может быть, это должно быть что-то вроде «MyBook.Id»?

...