- PR -

ODP.NETとVS2008について

1
投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-06 23:11
こんにちは、5年ぶりに.net開発をすることになってすっかり初心者です。
どなたかご教示下さい。

【環境】
VS2008
Oracle 10g
ODP.NET 10g
C#
WindowsXP(リリース時は2003Serverです)

VS2008、Oracle Client、ODP.NETを開発端末にインストールしました。
VS2008でOracle接続を確認したのですが、Oracleのコントロールが使えなく、
プログラムでもエラーとなってしまいます。

VS2008には参照設定でOracleDataAccessを追加し、ツールボックスのアイテム追加で
OracleCommandなどを選択したのですが、ツールボックス内で不活性となり、
コントロールを配置できません。

また、以下のようにテストコーディングしてみました。
---------------------------------------------------------------
OracleConnection con = new OracleConnection();
con.ConnectionString = "user id=***;password=***;data source=***";
con.Open();

OracleCommand oraCom = new OracleCommand();
oraCom.CommandText = "SELECT count(*) as cnt FROM t_cdmstr;";

OracleDataReader oraDr = oraCom.ExecuteReader();

//int cnt = Convert.ToInt32(oraCom.ExecuteScalar());
System.Diagnostics.Debug.WriteLine(oraDr["cnt"]);

con.Close();
con.Dispose();
-----------------------------------------------------------------

するとExecuteのところで、
「オブジェクトの現在の状態に問題があるため、操作は有効ではありません。」
というエラーが発生してしまいます。
イミデイトウィンドウでコネクション情報を見てみると

?con
{Oracle.DataAccess.Client.OracleConnection}
base {System.ComponentModel.Component}: {Oracle.DataAccess.Client.OracleConnection}
ConnectionString: "user id=***;data source=***"
ConnectionTimeout: 15
DataSource: "***"
ServerVersion: "10.2.0.1.0"
State: Open

と表示されました、ここでのConnectionStringにパスワードがないのは仕様ですかね?
ServerVersionの"10.2.0.1.0"はVS2008で開発してるからでしょうか?

とにかくOracleとのやり取りが出来ないと開発が始まらないので
どうぞ宜しくお願い致します。
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-06-07 12:56
せっかく生成したOracleConnectionインスタンスがOracleCommandインスタンスに設定されてないように見えるのですが・・・。
OracleCommandのコンストラクタかプロパティでOracleConnectionインスタンスを設定してみてください。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-09 11:35
otfさん、ご指摘ありがとうございます!

おっしゃるとおり、OracleCommandにコネクションの設定が漏れていました!
前回のプログラムに以下の1行を追加したところDBの値が取得できました。

---------------------------------------------------------------------
OracleCommand oraCom = new OracleCommand();
ここ→ oraCom.Connection = con;
oraCom.CommandText = "SELECT count(*) cnt FROM t_cdmstr";

//OracleDataReader oraDr = oraCom.ExecuteReader();

int cnt = Convert.ToInt32(oraCom.ExecuteScalar());
System.Diagnostics.Debug.WriteLine(cnt);
---------------------------------------------------------------------

助かりました。皆様今後とも宜しくお願い致します。

しかしながらOracleのコントロールが不活性でWebFormに貼り付けれないのは
いまだになぞですが。。。
失礼します。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-06-09 21:48
引用:

しかしながらOracleのコントロールが不活性でWebFormに貼り付けれないのは
いまだになぞですが。。。



理由はわかりませんが、WebFormの場合出ないようですね。
私の環境はVS2005Proですが、WindowsFormの場合は出てきます。
1

スキルアップ/キャリアアップ(JOB@IT)