C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: DataTableの主キー更新


(過去ログ 90 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■53815 / inTopicNo.1)  DataTableの主キー更新
  
□投稿者/ 逃亡者 (6回)-(2010/09/27(Mon) 20:34:54)

分類:[ASP.NET (C#)] 

C# 3.0開発となります。

一つ質問させていただいておりますが、別質問としてもう一つさせてください。

TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
どうかいたらいいのでしょうか

よろしくお願いいたします。
引用返信 編集キー/
■53819 / inTopicNo.2)  Re[1]: DataTableの主キー更新
□投稿者/ すなふきぬ (47回)-(2010/09/27(Mon) 23:45:53)
No53815 (逃亡者 さん) に返信
> C# 3.0開発となります。
>
> 一つ質問させていただいておりますが、別質問としてもう一つさせてください。
>
> TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
> どうかいたらいいのでしょうか

VS2008の場合は、以下の手順でTableAdapterを作成します。

1.ソリューションエクスプローラーでDataSetを開く
2.ツールボックスからTableAdapterをDataSetデザイナにドラッグする
3.TableAdapter構成ウィザードで、「SQLステートメントを使用する」を選択する
4.Where句を含むSQLを作成し、TableAdapterを完成させる

この手順で作成したTableAdapterならWhere句を考慮した更新ができます。
慣れてくるとデザイナを使用せず、手書きとかで作成するのも有りです。
引用返信 編集キー/
■53821 / inTopicNo.3)  Re[2]: DataTableの主キー更新
□投稿者/ 逃亡者 (8回)-(2010/09/28(Tue) 00:04:36)
No53819 (すなふきぬ さん) に返信
> ■No53815 (逃亡者 さん) に返信
>>C# 3.0開発となります。
>>
>>一つ質問させていただいておりますが、別質問としてもう一つさせてください。
>>
>>TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
>>どうかいたらいいのでしょうか
>
> VS2008の場合は、以下の手順でTableAdapterを作成します。
>
> 1.ソリューションエクスプローラーでDataSetを開く
> 2.ツールボックスからTableAdapterをDataSetデザイナにドラッグする
> 3.TableAdapter構成ウィザードで、「SQLステートメントを使用する」を選択する
> 4.Where句を含むSQLを作成し、TableAdapterを完成させる
>
> この手順で作成したTableAdapterならWhere句を考慮した更新ができます。
> 慣れてくるとデザイナを使用せず、手書きとかで作成するのも有りです。

ご回答ありがとうございます。
Where句を考慮したというのは、これはどういう風につかえるのでしょうか。
DataAdapter.Fill(ds)とやるのでしょうか
Where句の条件はどこでしていすればいいのでしょうか

引用返信 編集キー/
■53822 / inTopicNo.4)  Re[3]: DataTableの主キー更新
□投稿者/ 逃亡者 (9回)-(2010/09/28(Tue) 00:06:29)
No53821 (逃亡者 さん) に返信
> ■No53819 (すなふきぬ さん) に返信
>>■No53815 (逃亡者 さん) に返信
> >>C# 3.0開発となります。
> >>
> >>一つ質問させていただいておりますが、別質問としてもう一つさせてください。
> >>
> >>TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
> >>どうかいたらいいのでしょうか
>>
>>VS2008の場合は、以下の手順でTableAdapterを作成します。
>>
>>1.ソリューションエクスプローラーでDataSetを開く
>>2.ツールボックスからTableAdapterをDataSetデザイナにドラッグする
>>3.TableAdapter構成ウィザードで、「SQLステートメントを使用する」を選択する
>>4.Where句を含むSQLを作成し、TableAdapterを完成させる
>>
>>この手順で作成したTableAdapterならWhere句を考慮した更新ができます。
>>慣れてくるとデザイナを使用せず、手書きとかで作成するのも有りです。
>
> ご回答ありがとうございます。
> Where句を考慮したというのは、これはどういう風につかえるのでしょうか。
> DataAdapter.Fill(ds)とやるのでしょうか
> Where句の条件はどこでしていすればいいのでしょうか
>

なにもしてないFillをみるとWhere句がないのでそこにWhere句を入れるというのは
わかりましたが、どうやってそれにWhere句の条件をしていするのかがわかりません
よろしくお願いします
引用返信 編集キー/
■53825 / inTopicNo.5)  Re[4]: DataTableの主キー更新
□投稿者/ すなふきぬ (49回)-(2010/09/28(Tue) 00:40:28)
No53822 (逃亡者 さん) に返信
> ■No53821 (逃亡者 さん) に返信
>>■No53819 (すなふきぬ さん) に返信
> >>■No53815 (逃亡者 さん) に返信
>>>>C# 3.0開発となります。
>>ご回答ありがとうございます。
>>Where句を考慮したというのは、これはどういう風につかえるのでしょうか。
>>DataAdapter.Fill(ds)とやるのでしょうか
>>Where句の条件はどこでしていすればいいのでしょうか

書き方がマズかったかな。Where句を考慮は、「Where句を指定した更新」と考えてもらえばいいと思います。

> なにもしてないFillをみるとWhere句がないのでそこにWhere句を入れるというのは
> わかりましたが、どうやってそれにWhere句の条件をしていするのかがわかりません
> よろしくお願いします

前述したデザイナから、TableAdapterを作成する方法を試されてみましたか?
3.の「SQLステートメントを使用する」を選択した後に、「SQLステートメントの入力」画面が出ると思います。この画面で、SQLを直接入力するか、クエリビルダを使用してSELECTステートメントを作成します。

記入例)HOGEテーブルにID(主キー)列とNM列がある場合

SELECT ID, NM
FROM HOGE
WHERE (ID = @ID)

このような感じでSELECTステートメントを作成します。上記の画面で「詳細オプション」ボタンをクリックすると、「INSERT、UPDATE、およびDELETEステートメントの生成」にチェックされていれば、更新用のステートメントは自動作成されます。
引用返信 編集キー/
■53828 / inTopicNo.6)  Re[1]: DataTableの主キー更新
□投稿者/ shu (64回)-(2010/09/28(Tue) 06:15:07)
No53815 (逃亡者 さん) に返信
> C# 3.0開発となります。
>
> 一つ質問させていただいておりますが、別質問としてもう一つさせてください。
>
> TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
> どうかいたらいいのでしょうか
>
> よろしくお願いいたします。

DataTable tbl = new DataTable;
DataAdapter da = 〜;

da.Fill(tbl);

DataRow rows[] = tbl.Select(@"<Key項目> = <値>");   項目が2つなら <Key項目1> = <値1> and <Key項目2> = <値2>
DataRow row = rows[0];

このrowが目的のレコードです。

DB更新するならrowを編集して、da.Updateです。
引用返信 編集キー/
■53829 / inTopicNo.7)  Re[2]: DataTableの主キー更新
□投稿者/ 逃亡者 (10回)-(2010/09/28(Tue) 08:01:51)
No53828 (shu さん) に返信
> ■No53815 (逃亡者 さん) に返信
>>C# 3.0開発となります。
>>
>>一つ質問させていただいておりますが、別質問としてもう一つさせてください。
>>
>>TableAdapterでFillしたものから主キーになるものでWhere句を指定して1レコードをDataTableの中を更新したいんですけど、
>>どうかいたらいいのでしょうか
>>
>>よろしくお願いいたします。
>
> DataTable tbl = new DataTable;
> DataAdapter da = 〜;
>
> da.Fill(tbl);
>
> DataRow rows[] = tbl.Select(@"<Key項目> = <値>");   項目が2つなら <Key項目1> = <値1> and <Key項目2> = <値2>
> DataRow row = rows[0];
>
> このrowが目的のレコードです。
>
> DB更新するならrowを編集して、da.Updateです。


このやり方ですと、いったん全レコード取得しているので、できたら
Fillする段階でWhereされたあとのものがほしいです。
引用返信 編集キー/
■53830 / inTopicNo.8)  Re[5]: DataTableの主キー更新
□投稿者/ 逃亡者 (11回)-(2010/09/28(Tue) 08:06:23)
No53825 (すなふきぬ さん) に返信
> ■No53822 (逃亡者 さん) に返信
>>■No53821 (逃亡者 さん) に返信
> >>■No53819 (すなふきぬ さん) に返信
>>>>■No53815 (逃亡者 さん) に返信
> >>>>C# 3.0開発となります。
> >>ご回答ありがとうございます。
> >>Where句を考慮したというのは、これはどういう風につかえるのでしょうか。
> >>DataAdapter.Fill(ds)とやるのでしょうか
> >>Where句の条件はどこでしていすればいいのでしょうか
>
> 書き方がマズかったかな。Where句を考慮は、「Where句を指定した更新」と考えてもらえばいいと思います。
>
>>なにもしてないFillをみるとWhere句がないのでそこにWhere句を入れるというのは
>>わかりましたが、どうやってそれにWhere句の条件をしていするのかがわかりません
>>よろしくお願いします
>
> 前述したデザイナから、TableAdapterを作成する方法を試されてみましたか?
> 3.の「SQLステートメントを使用する」を選択した後に、「SQLステートメントの入力」画面が出ると思います。この画面で、SQLを直接入力するか、クエリビルダを使用してSELECTステートメントを作成します。
>
> 記入例)HOGEテーブルにID(主キー)列とNM列がある場合
>
> SELECT ID, NM
> FROM HOGE
> WHERE (ID = @ID)
>
> このような感じでSELECTステートメントを作成します。上記の画面で「詳細オプション」ボタンをクリックすると、「INSERT、UPDATE、およびDELETEステートメントの生成」にチェックされていれば、更新用のステートメントは自動作成されます。

ためしに作って、言われている通りになりましたが、まずFillでレコードを取得する方法としてWhere句で絞り込んだものを
Fillする方法がわかりませんでした。
TableAdapter(dt)などではWhere句の引数を指定できないので、どのように指定するのかがまず知りたいです。
よろしくお願いします。
引用返信 編集キー/
■53831 / inTopicNo.9)  Re[3]: DataTableの主キー更新
□投稿者/ shu (65回)-(2010/09/28(Tue) 08:10:49)
No53829 (逃亡者 さん) に返信
>
>
> このやり方ですと、いったん全レコード取得しているので、できたら
> Fillする段階でWhereされたあとのものがほしいです。
daに渡すSQL文で取得するレコードの条件はなんとでもなります。
DBからの取得はすなふきぬさんが記述しているので取得したデータのDataTable内の編集に
ついてのコメです。


引用返信 編集キー/
■53832 / inTopicNo.10)  Re[1]: DataTableの主キー更新
□投稿者/ ミラ (5回)-(2010/09/28(Tue) 08:33:33)
2010/09/28(Tue) 08:40:55 編集(投稿者)
2010/09/28(Tue) 08:40:49 編集(投稿者)

削除
引用返信 編集キー/
■53833 / inTopicNo.11)  Re[6]: DataTableの主キー更新
□投稿者/ すなふきぬ (52回)-(2010/09/28(Tue) 08:55:37)
No53830 (逃亡者 さん) に返信
> ためしに作って、言われている通りになりましたが、まずFillでレコードを取得する方法としてWhere句で絞り込んだものを
> Fillする方法がわかりませんでした。
> TableAdapter(dt)などではWhere句の引数を指定できないので、どのように指定するのかがまず知りたいです。
> よろしくお願いします。

昨日書いておいたように作れば、Fillメソッドの第二引数移行に、Where句で指定した条件を指定可能です。
ADOのデザイナはIDEの環境等でも変わるので、Visual Studioのバージョン等も書いた方が適切な回答が得られると思います。
もし、ADOの知識があまりないのであれば、まず基礎から練習する方が早く理解できるかもしれません。

http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_03/vsdbprog_03_01.html
引用返信 編集キー/
■53836 / inTopicNo.12)  Re[6]: DataTableの主キー更新
□投稿者/ 魔界の仮面弁士 (1839回)-(2010/09/28(Tue) 09:44:57)
No53830 (逃亡者 さん) に返信
>>SELECT ID, NM
>>FROM HOGE
>>WHERE (ID = @ID)
> ためしに作って、言われている通りになりましたが、まずFillでレコードを取得する方法としてWhere句で絞り込んだものを
> Fillする方法がわかりませんでした。
> TableAdapter(dt)などではWhere句の引数を指定できないので、どのように指定するのかがまず知りたいです。

TableAdapter の作り方にもよりますが、元の SQL に WHERE が無い場合は、

 var ds = new HogeDataSet();
 using ( var adp = new 何某.HogeTableAdapter() )
 {
  adp.Fill(ds.Hoge);
 }

という感じで、WHERE をつけていた場合は、

 var ds = new HogeDataSet();
 using ( var adp = new 何某.HogeTableAdapter() )
 {
  adp.Fill(ds.Hoge, 値1, 値2);
 }

という感じです。引数の数やメソッド名(Fill/GetData)などは、
デザイナへの設定次第で変わることもありますけれども。



■No53833 (すなふきぬ さん) に返信
> ADOのデザイナはIDEの環境等でも変わるので、Visual Studioのバージョン等も書いた方が適切な回答が得られると思います。
ADO ではなく、ADO.NET ですよね?
http://msdn.microsoft.com/ja-jp/library/ms973217.aspx
(いちおう、ADO 用の DataEnvironment デザイナという物も存在はしていますが…)

引用返信 編集キー/
■53878 / inTopicNo.13)  Re[7]: DataTableの主キー更新
□投稿者/ すなふきぬ (53回)-(2010/09/28(Tue) 23:22:05)
No53836 (魔界の仮面弁士 さん) に返信
> ■No53830 (逃亡者 さん) に返信
> ■No53833 (すなふきぬ さん) に返信
>>ADOのデザイナはIDEの環境等でも変わるので、Visual Studioのバージョン等も書いた方が適切な回答が得られると思います。
> ADO ではなく、ADO.NET ですよね?
> http://msdn.microsoft.com/ja-jp/library/ms973217.aspx
> (いちおう、ADO 用の DataEnvironment デザイナという物も存在はしていますが…)

えぇ、ADO.NETでしたね。つい、ADOと言ってしまうんですよ。
引用返信 編集キー/
■53905 / inTopicNo.14)  Re[7]: DataTableの主キー更新
□投稿者/ 逃亡者 (12回)-(2010/09/29(Wed) 21:16:02)
ありがとうございます。
そういうことですか。理解できました。ありがとうございます。
無事に解決しました。

No53836 (魔界の仮面弁士 さん) に返信
> ■No53830 (逃亡者 さん) に返信
> >>SELECT ID, NM
> >>FROM HOGE
> >>WHERE (ID = @ID)
>>ためしに作って、言われている通りになりましたが、まずFillでレコードを取得する方法としてWhere句で絞り込んだものを
>>Fillする方法がわかりませんでした。
>>TableAdapter(dt)などではWhere句の引数を指定できないので、どのように指定するのかがまず知りたいです。
>
> TableAdapter の作り方にもよりますが、元の SQL に WHERE が無い場合は、
>
>  var ds = new HogeDataSet();
>  using ( var adp = new 何某.HogeTableAdapter() )
>  {
>   adp.Fill(ds.Hoge);
>  }
>
> という感じで、WHERE をつけていた場合は、
>
>  var ds = new HogeDataSet();
>  using ( var adp = new 何某.HogeTableAdapter() )
>  {
>   adp.Fill(ds.Hoge, 値1, 値2);
>  }
>
> という感じです。引数の数やメソッド名(Fill/GetData)などは、
> デザイナへの設定次第で変わることもありますけれども。
>
>
>
> ■No53833 (すなふきぬ さん) に返信
>>ADOのデザイナはIDEの環境等でも変わるので、Visual Studioのバージョン等も書いた方が適切な回答が得られると思います。
> ADO ではなく、ADO.NET ですよね?
> http://msdn.microsoft.com/ja-jp/library/ms973217.aspx
> (いちおう、ADO 用の DataEnvironment デザイナという物も存在はしていますが…)
解決済み
引用返信 編集キー/
■53907 / inTopicNo.15)  Re[8]: DataTableの主キー更新
□投稿者/ 逃亡者 (13回)-(2010/09/29(Wed) 21:20:00)
No53878 (すなふきぬ さん) に返信
> ■No53836 (魔界の仮面弁士 さん) に返信
>>■No53830 (逃亡者 さん) に返信
>>■No53833 (すなふきぬ さん) に返信
> >>ADOのデザイナはIDEの環境等でも変わるので、Visual Studioのバージョン等も書いた方が適切な回答が得られると思います。
>>ADO ではなく、ADO.NET ですよね?
>>http://msdn.microsoft.com/ja-jp/library/ms973217.aspx
>>(いちおう、ADO 用の DataEnvironment デザイナという物も存在はしていますが…)
>
> えぇ、ADO.NETでしたね。つい、ADOと言ってしまうんですよ。

いろいろとありがとうございます。
べんきょうします
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -