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」の価値と関係があると思います。データ型から 1 文字であると想定する必要がありますが、エラー メッセージはそれが本格的な COM オブジェクトであることを示しているようです。「MyBook.Id」のようなものでしょうか?

于 2011-01-27T15:57:41.293 に答える