InvokeMemberでenumのセット – プログラミング – Home

通知
すべてクリア

[解決済] InvokeMemberでenumのセット


ももんが
 ももんが
(@ももんが)
ゲスト
結合: 18年前
投稿: 38
Topic starter  

VisualStudio2005、C#、ライブラリプロジェクトで開発をしています。

InvokeMemberで、指定のプロパティをセットしたいのですが、以下のソースで

Assembly asm = GetAssembly(Oracle.DataAccess, Version=2.102.2.20,
Culture=neutral, PublicKeyToken=89B483F429C47342);
Type type = asm.GetType(Oracle.DataAccess.Client.OracleParameter);

type.InvokeMember(OracleDbType,
BindingFlags.SetProperty,
null,
param,
new object[] { 121 }); // 121は、OracleDbType.RefCursorのenum値。

(*)paramは、IDataParameter

↓のエラーになってしまいます。
System.MissingMethodException: メソッド
'Oracle.DataAccess.Client.OracleParameter.OracleDbType' が見つかりません。

InvokeMemberでenumの値をセットするにはどうすれば良いでしょうか。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

Oracle名前空間は使ったことがないですが……。

とりあえず,121のかわりにEnum.ParseかEnum.ToObject使って,
OracleDbType型のオブジェクトを渡すとどうなりますか?


返信引用
ももんが
 ももんが
(@ももんが)
ゲスト
結合: 18年前
投稿: 38
Topic starter  

昨日は帰り際にてんぱって、書き込みしてしまいました。

ご指摘のように、
new object[] { Enum.Parse(type2, 121) });
あるいは、
new object[] { Enum.ToObject(type2, 121) });
としたところ、どちらも成功しました。

Enumなのでintで良いだろうと思ってましたが
これらを使ってEnumのオブジェクトを渡さないといけなかったのですね。

YuOさん、ありがとうございました。


返信引用
ももんが
 ももんが
(@ももんが)
ゲスト
結合: 18年前
投稿: 38
Topic starter  

あ、↑のtype2は、OracleDbTypeから作成したTypeオブジェクトです。

これって、ODPがバージョンアップして、もしOracleParameter.OracleDbTypeが121
ではなくなったら動かなくなりそうですが、これは仕方ないところですよね。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

Enum.Parseには列挙値だけでなく列挙名を渡せます。
なので,
Enum.Parse(type2, RefCursor)
のようにすれば,OracleDbType.RefCursorが取得出来ます。


返信引用
ももんが
 ももんが
(@ももんが)
ゲスト
結合: 18年前
投稿: 38
Topic starter  

>Enum.Parse(type2, RefCursor)
試してみましたところ見事できました。

ほんと助かりました。ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました