2016-12-08 26 views
1

Oracleストアドプロシージャに整数配列を渡そうとしています。Dapper ORMからOracleストアドプロシージャを呼び出すときに 'System.Int32 []'型のオブジェクトを 'System.IConvertible'にキャストできません

Oracleで定義されているタイプ。

CREATE OR REPLACE TYPE EMPIDLIST 
AS TABLE OF Number; 

以下、上記のタイプを使用しているストアドプロシージャです。

CREATE OR REPLACE PROCEDURE TESTINPUTARRAY 
(
    IN_STR_ARRAY IN EMPIDLIST 
) AS 
BEGIN 
    --Doing something here..... 
    NULL; 
END TESTINPUTARRAY; 

以下DapperのORMを使用して、.NETアプリケーションからストアドプロシージャを呼び出すためのコードです。

上記ExecuteAyncメソッドが呼び出され
List<int> values = new List<int>() { 1, 2, 3, 4, 5 }; 
OracleParameter parameters = new OracleParameter 
{ 
    ParameterName = "IN_STR_ARRAY", 
    OracleDbType = OracleDbType.Int32,      
    Value = values.ToArray(), 
    Direction = System.Data.ParameterDirection.Input 
}; 
await connection.ExecuteAsync("TESTINPUTARRAY", param: parameters, commandType: CommandType.StoredProcedure); 

、私は '可能System.Int32 []は'「System.IConvertible

を入力するタイプのオブジェクトをキャストすることができませんエラー -

を以下の取得

この問題についてオンラインで検索しましたが、解決策が見つかりませんでした。

答えて

1

私は前に(あなたは慎重にそれを調べる必要があり、それは.NET-ORA DEVとして、あなたの指針であるべき)1 related questionに答え、これは何が必要です:

OracleParameter parameters = new OracleParameter 
{ 
    ParameterName = "IN_STR_ARRAY", 
    OracleDbType = OracleDbType.Int32, 
    // -- ADD THESE LINES: 
    CollectionType = OracleCollectionType.PLSQLAssociativeArray, 
    Size = 100, // Declare more than you expect     
    // -- 
    Value = values.ToArray(), 
    Direction = System.Data.ParameterDirection.Input 
}; 
+0

おかげT。S.これは今このソリューションで動作します。 – Raj

+0

@Rajあなたの問題を解決してうれしいです! –

関連する問題