|
■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 文をコードに埋め込まずに」のはなぜ?」と疑問に思います。
|