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

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

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

Re[13]: SqlCommandBuilderによるデータ更新について [1]


(過去ログ 54 を表示中)

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

■30005 / inTopicNo.21)  Re[11]: SqlCommandBuilderによるデータ更新について
  
□投稿者/ も (61回)-(2008/12/17(Wed) 13:50:06)
No30004 (も さん) に返信
> ■No29979 (未記入 さん) に返信
> もです、後学の為にお教えいただきたいのですが
>>皮肉で馬鹿なことを言った?
>>皮肉になってないから突っ込んでるわけですが…。
>>「UPDATE文なしで更新できるわけがない」という前提があれば皮肉にもなりますけどねえ。
>>実際には「UPDATE文なしで更新できる」ソリューションがあるわけですから。
> ”UPDATE文なしで更新”とはRDBMSに対してSQLのUPDATE文を一切発行せずに更新できるということでしょうか?
> それともプログラミングテクニック的にSQLのUPDATE文を隠蔽して(つまり内部でUPDATE文を使って)更新できるということでしょうか?
にゃああああああ
解決済みにチェックが入ってた(orz
引用返信 編集キー/
■30052 / inTopicNo.22)  Re[12]: SqlCommandBuilderによるデータ更新について
□投稿者/ 未記入 (6回)-(2008/12/17(Wed) 16:54:32)
> ”UPDATE文なしで更新”とはRDBMSに対してSQLのUPDATE文を一切発行せずに更新できるということでしょうか?
> それともプログラミングテクニック的にSQLのUPDATE文を隠蔽して
> (つまり内部でUPDATE文を使って)更新できるということでしょうか?

私に質問していますか?
そうだとして、おそらくあなたの理解力では理解することはできないと思いますので、答えるのが面倒です。
だって私の最初の(1回)と表示されている内容を読んでも理解できていないってことですものねえ?
引用返信 編集キー/
■30067 / inTopicNo.23)  Re[10]: SqlCommandBuilderによるデータ更新について
□投稿者/ Jitta (561回)-(2008/12/17(Wed) 17:37:11)
No29979 (未記入 さん) に返信
> で、何が不明瞭なのかは答えてくれないのですか?
 ごめんなさい、答えたつもりなのですが。
 あ、その前のに答えてなかったですね。

> 「それ」とは何を指していますか? 何に対して不明瞭だと言っていますか?
 「それ」は、みきぬさんのポストを借りますが、「「UPDATE文を使わないで」ってどういう意味?「諸処の事情」ってどんな事情?」です。
 DAO によって、開発者が UPDATE 文を明示的に使用する必要がないことはわかりました。しかし、明示的に指定する必要がないことと、「UPDATE文を使わない」という理由がどのように関係しているのか、わかりません。未記入さんがKEIさんの上司なら、「DAO の働きを理解させるため」というのは、「UPDATE文を使わない」理由として明瞭だと思いました。


 ちょっと意見させてもらいますね。

> それに対して、UPDATE、DELETE、INSERT を使う場合というのは、多くの場合、
> プログラム内で Row オブジェクトとして表現されているのですね。つまり行が特定されているんです。
> それなら、そのオブジェクトに対して操作を指示できたほうが楽だとは思いませんか?
> SQL文を直接書く場合は、Row オブジェクトからキーとなる値を取り出して、
> 自分で Where句を表現しなおさなきゃならないんです。Row オブジェクトとして行が特定されているのにですよ?

 私は「Row オブジェクトとして行が特定されているのに」、もう一度行を特定するような UPDATE 文を提示していません。Row オブジェクトを生成する前に行を特定する方法を提示しています。引用部分は、UPDATE 文を使わない理由として、ちょっと違うかなと思いました。私の意見は、「DAO 使う必要ないでしょ?」ということになるのかな?
 また、もし、SELECT 文が複数のテーブルから引用していたり、主キーが複数列に付けられている場合、UPDATE 文を明示的に指定しなければなりません。やはり、ご説明には違和感があります。

 「SELECT * FROM [顧客]」であれば「べた書きではない」と思うのですが、最初「SELECT [性別],[F] FROM [顧客]」として、それを「SELECT [顧客C],[性別],[F] FROM [顧客]」と修正しています。これは、べた書きだと思います。テーブル名さえ渡せばテーブルの定義を取得することは出来るので、「どれどれもってこい」という指示までは不要と考えます。列名を指定している部分が「べた書きだと思う」部分です。
 ADO.NET 場合、型付きデータセットを使えば、データセットをデザインする時点でデータベースの定義を複製できますから、DataTableAdapter.Fill メソッドで全てのデータを取得できます。ああ、VS2003 だから、CustomDataSet.Fill か。どっちにしても、明示的に SELECT 文を発行する必要はありません。ここでも、SELECT が特別というのは、違和感を感じます。
 あるいは、SELECT 文を特別扱いしたことで、「UPDATE文を*直接*発行しない、ということじゃない?」という理由付けに対して、「SELECT 文も*直接*発行しないように出来るけど?」と疑問に思います。つまり、「「SQL 文をコードに埋め込まずに」ではなく、「UPDATE 文をコードに埋め込まずに」のはなぜ?」と疑問に思います。

引用返信 編集キー/
■30075 / inTopicNo.24)  Re[11]: SqlCommandBuilderによるデータ更新について
□投稿者/ 未記入 (7回)-(2008/12/17(Wed) 19:37:18)
ちょっとはましになってきたかな。

> しかし、明示的に指定する必要がないことと、「UPDATE文を使わない」という理由が
> どのように関係しているのか、わかりません。

それが理由だとは限らない。だから不明瞭だと言ったというなのですね。
なるほど、発言の意味は分かりました。そして…私にも理由はわかりません。
私がそれ(DAOアプローチ)が理由だとは一度も断定していませんよ。
読み直してもらえば分かりますが、私は推測として書いていますよ。
これは、たくボンさんも同じように推測として書いていますね。

その後は、SELECT文はベタだからUPDATE文を隠蔽する理由が分からんだとか、
ストレージを書き換えるのかとか、全件引っ張ってきていて非効率だとか、
*質問者がUPDATE文を使わない意図*とは関係ないところで、私の推測に対して
文句があるようでしたので、DAOによって SQL を隠蔽する開発方法がある、
ということを説明しました。

それに対して、質問者がそのような意図を持っていたのか不明瞭だと
私に対して言われても困りますよ。


> 私の意見は、「DAO 使う必要ないでしょ?」ということになるのかな?

そういうことになると思います。私はすでに述べていますが、DAOの優位性を
主張しているのではなく、DAOの存在を説明しただけです。
私自身、様々な理由で、DAOアプローチが最適な方法だとは思っていません。

> また、もし、SELECT 文が複数のテーブルから引用していたり、
> 主キーが複数列に付けられている場合、UPDATE 文を明示的に指定しなければなりません。

その場合でも UPDATE文をカスタマイズすることができますよ。
なんだ、結局 UPDATE文を書くんじゃないかって?
それなら、素直に UPDATE文を書けばいいじゃないかって?

まあUPDATE文、書きますけどね。全員が書く必要はないというのがミソです。
DAOパターンってそもそもそういうものですし。
それがカプセル化というものですよ。大規模開発で意味が出てきます。

> 列名を指定している部分が「べた書きだと思う」部分です。

質問者は「顧客C」を必要としていないと思いますよ。ADO.NET の実装の都合に
合わせて、主キーを指示してあげる必要があったというだけで。主キーを自動的に
取得して裏方でやってくれるDAOだって実現できないわけじゃないですし。
やはり、処理対象の選択行為を Where句を書かずに、ライブラリの機能で
おこなっているというのは「SELECT文をベタ書き」していないということになると
私は思っています。が、この話はもうやめておきましょう。大した意味を持っていないし
そもそも「ベタ」の定義も曖昧です。極端なことを言えば、パラメタ化クエリでさえ
「ベタ書き」かどうかで意見が分かれることもあると思いますので。

> 「SELECT 文も*直接*発行しないように出来るけど?」

そうですね。DAOアプローチを徹底するということもできますね。私もそう思います。
その上で、(私だったら) SELECT 文を書く、という理由はすでに述べましたので繰り返しません。

というかですね。昔からこういうアプローチってありませんでしたか?
私は好きではないのですが、UPDATE/INSERT/DELETE の直接発行を禁じて
データ更新はすべてストアドプロシージャを経由させるシステム開発とか。
見たり聞いたりしたことないですか?
DAOも考えの起点は、同じところにあると思います。

もしかしたら、あなたたちはストアドプロシージャでDMLを隠蔽するという
アプローチも見たことないのかもしれませんね。

おそらく、経験、想像力、脳味噌のいずれかもしくは複数が足りていない
のだと思います。UPDATE文を使わないと聞いて、最初に出てくるのが
「ストレージ書き換え」ですからね。馬鹿かと思いましたよ。

そしたら、皮肉だとか、赤面して反論だとか。馬鹿だと確信しましたよ。

引用返信 編集キー/
■30078 / inTopicNo.25)  Re[12]: SqlCommandBuilderによるデータ更新について
□投稿者/ い (6回)-(2008/12/17(Wed) 21:55:23)
> もしかしたら、あなたたちはストアドプロシージャでDMLを隠蔽するという
> アプローチも見たことないのかもしれませんね。

ありますけどね。プロジェクトで採用するアーキテクチャや、
モデリング手法によって、色々使い分けてはいますけども、

> おそらく、経験、想像力、脳味噌のいずれかもしくは複数が足りていない
> のだと思います。UPDATE文を使わないと聞いて、最初に出てくるのが
> 「ストレージ書き換え」ですからね。馬鹿かと思いましたよ。
>
> そしたら、皮肉だとか、赤面して反論だとか。馬鹿だと確信しましたよ。

まぁ、バカで結構じゃないですかね。
勝利宣言おめでとうございます。

引用返信 編集キー/
■30079 / inTopicNo.26)  Re[12]: SqlCommandBuilderによるデータ更新について
□投稿者/ Jitta (562回)-(2008/12/17(Wed) 23:11:20)
Jitta さんの Web サイト
No30075 (未記入 さん) に返信

> ストレージを書き換えるのかとか、

 これ、私(Jitta と Jitta on the way)じゃないですよね。一緒くたにするのは、やめてもらえませんか?
誰に対して、何を言っているのか、混乱するので。

 少なくとも私は、ストレージを書き換えるなんて思いもしなかったので、

> UPDATE文を使わないと聞いて、最初に出てくるのが
> 「ストレージ書き換え」ですからね。馬鹿かと思いましたよ。

と、いっしょに論じられるのは不愉快です。
引用返信 編集キー/
■30080 / inTopicNo.27)  Re[13]: SqlCommandBuilderによるデータ更新について
□投稿者/ 未記入 (8回)-(2008/12/17(Wed) 23:34:39)
誰の発言かということまであまり気にせずに、まとめて応答させてもらっています。
自分の発言に対する応答ではないと思うところは、無視してもらったらよいと思います。

他の読み手も混乱すると、あなたの名誉に関わるかもしれないので、
一言だけ書いておきます。私の発言に反応している全員が「ストレージ書き換え」を
連想したとは思っていません。脊髄反射する人が多いとは思っていますけども。
引用返信 編集キー/
■30088 / inTopicNo.28)  Re[13]: SqlCommandBuilderによるデータ更新について
□投稿者/ も (63回)-(2008/12/18(Thu) 04:02:40)
2008/12/18(Thu) 04:05:00 編集(投稿者)

No30052 (未記入 さん) に返信
>>”UPDATE文なしで更新”とはRDBMSに対してSQLのUPDATE文を一切発行せずに更新できるということでしょうか?
>>それともプログラミングテクニック的にSQLのUPDATE文を隠蔽して
>>(つまり内部でUPDATE文を使って)更新できるということでしょうか?
>
> 私に質問していますか?
yes

> そうだとして、おそらくあなたの理解力では理解することはできないと思いますので、答えるのが面倒です。
> だって私の最初の(1回)と表示されている内容を読んでも理解できていないってことですものねえ?
とりあえずリンクです No29896
まあ文が交錯してますが意図はつかめたのでありがとうございました。
※軽くキラーワードを書いていたので削除
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

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

管理者用

- Child Tree -