質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

1回答

3643閲覧

System.Data.OracleClientについて

viviane

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

1クリップ

投稿2017/08/07 22:33

編集2019/02/26 01:33

現在、System.Data.OracleClientを使用してオラクルアクセスを行っているのですが
下記のような現象が出ています。

実行環境
実行環境1.オラクルサーバ:oracle 12c オラクルクライアント:oracle 11g
実行環境2.オラクルサーバ:oracle 12c オラクルクライアント:oracle 12c

C#のプログラムでSystem.Data.OracleClientを使用しプロシージャを実行した場合、
実行環境1では、期待している値が正しく戻ってきます。
実行環境2では期待した値が戻ってこなくプロシージャをうまく実行できてないような動きです。
oracle12cではSystem.Data.OracleClientを使用してプロシージャを実行できなくなってしまったのでしょうか?

以下、処理内容

DBオープン等は省略

既にインスタンス生成されている「OracleCommand cmd」

cmd.CommandText = 「プロシージャ名」;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
OracleParameter パラメータ変数 = cmdPLSQL.Parameters.Add("xxxx", System.Data.OracleClient.OracleType.VarChar, 2);
パラメータ変数.Value = 渡す値;

OracleParameter 戻り値変数 = new OracleParameter("return", System.Data.OracleClient.OracleType.VarChar, 1);
戻り値変数.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(戻り値変数);
cmd.ExecuteNonQuery();

戻り値= (戻り値変数.Value.ToString();

追記
プロシージャの出力変数はvachar2で文字列1文字がセットされます。
出力変数のOracleParameterの型をVarChar⇒char(固定長)にし
サイズを3倍にしたら値が返ってくるようになりましたが
原因はまだ分かっておりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SuzukiYoshikazu

2018/09/03 08:42

もう解決されたでしょうか?12.2.0.1へのアップグレードで同様の事象で困っております。OutParameterの桁数を3倍にすれば値が取得できることは確認できました
viviane

2019/02/14 00:48

すいません。返信遅くなりました。 結局、解決しないのでODP.NETを使用するようにしました。 そちらは解決しましたでしょうか? 何か分かりましたら教えて下さい。
SuzukiYoshikazu

2019/02/25 13:41

返信ありがとうございます。サポートにも問合せましたが、自社の製品でないので対応できないとの回答でした。 こちらもあきらめてODPで組み直しました
guest

回答1

0

代理検索:System.Data.OracleClient 非推奨
https://www.google.co.jp/search?lr=lang_ja&hl=ja&tbs=lr%3Alang_1ja&q=System.Data.OracleClient+%E9%9D%9E%E6%8E%A8%E5%A5%A8&oq=System.Data.OracleClient+%E9%9D%9E%E6%8E%A8%E5%A5%A8&gs_l=psy-ab.3..0.149006.153059.0.154201.11.11.0.0.0.0.135.1064.8j3.11.0....0...1.1j4.64.psy-ab..1.10.919...0i4k1j0i4i30k1j0i30k1.aMpSuF-eXC0

Visual Studio / C# のバージョン、エディションが未記入
なんのソリューションを使っているか未記入
.NET Framework のバージョン未記入

.NET Framework 4.0 から、当該機能は非推奨です。(2009年か2010年です。)
オラクルであれば、
ODP.NET
を使うと思いますが?
Provider factory class を作って使用すれば、
全く気にならないレベルで、使用可能です。

投稿2017/08/08 01:45

daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

viviane

2017/08/08 01:54

Microsoft Visual C# 2008 91984-270-7035463-60461 .NET Framework3.5です。 以前からSystem.Data.OracleClientを使用しており工数がかかりすぎてODP.NETに置き換えられない状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問