DOBON.NET DOBON.NETプログラミング掲示板過去ログ

c#でDataGridViewとDatasetを使用したDBの更新

環境/言語:[vs2010以降 Oracle12c]
分類:[.NET]

c#習得中の者です。
プログラム経験はありますが、c#(とオラクル)は初心者です。
初歩的な質問(だと思っております)で恐縮です。

データセットを使用したDBへの更新でつまずいております。
DataGridViewにデータを表示し、button1(更新ボタン)が押されたら更新するという
単純な内容なのですが、下記コードのようなエラーになります。
エラーの内容は「確かにそうだ」と納得できるんですが、
では、どうすればよいのかわかりません。

参考書や多くのサイトでは、下記の様なコードで終結しているのですが、
DataAdapterやDataSetをPublicのような感じで宣言すれば良いのかとも思いましたが、
様々なエラーが表示されます。(・・・この辺りが知識不足丸出しでお恥ずかしい・・・)

どうぞよろしくお願いいたします。


//DataGridViewへデータの表示
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "Data Source=aaa;User Id=bbb;Password=ccc";
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select D.syouhin_cd,(select S.syouhin_name from syouhin_f S where D.syouhin_cd = S.syouhin_cd) syouhin_name,D.suuryou from denpyou_f D";
OracleDataAdapter da = new OracleDataAdapter(cmd);
OracleCommandBuilder cb = new OracleCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds);
DataGridView1.DataSource = ds.Tables[0];


private void button1_Click(object sender, EventArgs e)
//登録ボタンクリック
{
da.Update(ds); //←「名前 'da' は現在のコンテキスト内に存在しません。」というエラーになる
//←「名前 'ds' は現在のコンテキスト内に存在しません。」というエラーになる
}
■No32275に返信(dt-8500さんの記事)

初心者というならいきなり Oracle を使うとか、クエリを複雑にするのでなく、チュート
リアルの多い SQL Server を使ってもっと簡単なクエリでやってみたらどうですか?

例えば下記:

10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
http://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688


そのように作れば、自分ではコードをほとんど書くことなく、以下のページの図にあるよ
うな構成のアプリをウィザードベースで作れます。

Visual Studio でのデータへの接続の概要
http://msdn.microsoft.com/ja-jp/library/wxt2cwcc(VS.80).aspx


そのあたりが十分理解できてから Oracle + ODP.NET を使ってアプリを作ることをお勧め
します。
■No32275に返信(dt-8500さんの記事)
> c#習得中の者です。
> プログラム経験はありますが、c#(とオラクル)は初心者です。
> 初歩的な質問(だと思っております)で恐縮です。
>
> データセットを使用したDBへの更新でつまずいております。
> DataGridViewにデータを表示し、button1(更新ボタン)が押されたら更新するという
> 単純な内容なのですが、下記コードのようなエラーになります。
> エラーの内容は「確かにそうだ」と納得できるんですが、
> では、どうすればよいのかわかりません。
>
> 参考書や多くのサイトでは、下記の様なコードで終結しているのですが、

どんなページや参考書を見てそうおっしゃっているのか分りませんが
余り普通に用いるとは思いません。

> DataAdapterやDataSetをPublicのような感じで宣言すれば良いのかとも思いましたが、
> 様々なエラーが表示されます。(・・・この辺りが知識不足丸出しでお恥ずかしい・・・)
>
> どうぞよろしくお願いいたします。

「どうぞ」は相手に物を薦めるときに用いるのだと思いますが違いますか?

>
> //DataGridViewへデータの表示
> OracleConnection conn = new OracleConnection();
> conn.ConnectionString = "Data Source=aaa;User Id=bbb;Password=ccc";
> OracleCommand cmd = new OracleCommand();
> cmd.Connection = conn;
> cmd.CommandType = CommandType.Text;
> cmd.CommandText = "select D.syouhin_cd,(select S.syouhin_name from syouhin_f S where D.syouhin_cd = S.syouhin_cd) syouhin_name,D.suuryou from denpyou_f D";
> OracleDataAdapter da = new OracleDataAdapter(cmd);
> OracleCommandBuilder cb = new OracleCommandBuilder(da);
> DataSet ds = new DataSet();
> da.Fill(ds);
> DataGridView1.DataSource = ds.Tables[0];

何故、この部分がどこに属するコードなのか提示しないのが不思議でなりません。
更に、どのようなアプリケーションとして構成しているのかも読み取れません。
読み手に負担をかけ過ぎですよ。
あなたのコードについて何も知らない相手に説明するためには何が最小限度必要か
考えてみましょう。

> private void button1_Click(object sender, EventArgs e)
> //登録ボタンクリック
> {
> da.Update(ds); //←「名前 'da' は現在のコンテキスト内に存在しません。」というエラーになる
> //←「名前 'ds' は現在のコンテキスト内に存在しません。」というエラーになる
> }
>
>
da, ds を恐らく XXXXForm というクラスのメンバー(void button1_Click がメンバーになっているのが XXXXForm だと仮定している)にすれば XXXXForm のメンバー関数間で触ること(読み書き)ができるでしょう。
WebSurfer様
大変ありがとうございます。
色々と事情がありまして、「c#とOracle」が必須のプロジェクトでしたので、
現状に至っております。
ご紹介いただいたサイト、参考にさせていただきます。

しま様
色々と、ご指摘いただきありがとうございます。
最後のコメント、助かります。
頭の片隅には入っているのでしょうが、そこまでたどり着かない・・・

ありがとうございました。
解決済み!
■No32284に返信(dt-8500さんの記事)

> 色々と事情がありまして、「c#とOracle」が必須のプロジェクトでしたので、
> 現状に至っております。
> ご紹介いただいたサイト、参考にさせていただきます。

趣味で勉強しているのかと思いましたが、どうも仕事で開発していて、基本的
なことを勉強するような時間的余裕がないという感じですね。

同じプロジェクトに参加している同僚、先輩、上司に聞けないのですか?

聞ける環境になくて、このまま無理やり(?)開発を進めていって、とりあえ
ずうまくいったら一般にリリースされる・・・ということはないですよね?
解決済み!
■No32285に返信(WebSurferさんの記事)

WebSurfer様
ご迷惑をおかけしております。

あまり詳しくはお話できませんが、
社内のシステム関連の構築が主な目的です。
他の企業との連携もありまして、c#とOracleという仕様が決まっています。
知識のある人材がいない状況からのスタートです。
(私はDOS時代はバリバリでしたが、今となっては・・・)
この先に研修が予定されておりまして、結構な費用がかかっていますので、
少しでも予習をして充実した内容の研修にしようという事で現在奮闘中です。

>聞ける環境になくて、このまま無理やり(?)開発を進めていって、とりあえ
>ずうまくいったら一般にリリースされる・・・ということはないですよね?

社外に作成したソフトが出る事はありませんが、
社内や外部企業との関係がありますので、気は抜けません。

大変ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板