5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ADO.NETの質問・雑談スレ

1 :NAME IS NULL:05/01/02 10:54:49 ID:XCpHoqqm
ADO.NETに関する質問・雑談・評価 etc
何でもどうぞ。

2 :NAME IS NULL:05/01/02 10:55:45 ID:XCpHoqqm
リンク
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html


3 :NAME IS NULL:05/01/04 23:23:17 ID:gtuR+WFj
ADO.NETはADOから派生されたという表現だが、この両者って別物のような感じがするのだが・・・・

使用しているクラスにしても共通点が少ないし、
ADO.NETは.NETフレームワーク上に位置し、ADOはOS上に乗っている。

漏れはADOをこなしてきて、ADO.NETに入った性質だが最初が苦労した。
考え方が全然違う感じがしたよ。


4 :NAME IS NULL:05/01/05 00:16:03 ID:???
>>3
つーか、本当に考え方違うでしょ。
ADOは接続しながらデータ操作するのが普通だけど、ADO.NETは非接続推奨っていうか、他に手段が無い。

5 :NAME IS NULL:05/01/05 00:24:18 ID:???
うん。だから、逆にADO.NETっていう名前がまぎらわしいと思う。
別の名前にすればよかったのに。。。

漏れも、ADOをこなしてきてADO.NETに入った性質だが
DataSetとかDataViewとかクラスの使い方がいまだに分からん
ところがある。。。欝だ。


6 :NAME IS NULL:05/01/08 20:21:51 ID:???
ソースコードで、ADOと近いのはADO.NETよりも、DAOの方だな。w

7 :7:05/01/09 20:34:18 ID:wBFa/DC9
データセットの生成を行うと
「生成中にエラーが発生しました。この問題を解決するには、
プロジェクトをビルドし、エラーを修正してから、データセットを再生成してください。」
と出ます。
xsdというのは作成されるのですが、そのままビルドすると
ビルドエラーとなり、
「クラス 'dataRow' は、それ自体から継承することはできません」
と出ます。
どのようにしたらいいのでしょうか?
'dataRow' は 'dataRow' から継承されます。


8 :NAME IS NULL:05/01/09 20:42:58 ID:???
>>7
どういうプロジェクトを作っていて、どういう過程でデータセットの生成
を行おうとしたのかを教えて欲しい。
その情報がないと、再現しようがないのでなんとも。。。

9 :7:05/01/09 20:56:57 ID:wBFa/DC9
VB.netのWindowsアプリケーションです。
「ツール」−「データベースへの接続」からMicrosoft Jet4.0OLE DB Provider
を選んでデータソースを選択しました。
それからツールボックスからOleDbDataAdapterをフォームにドロップし、
それ以降は
http://www.atmarkit.co.jp/fdotnet/basics/adonet07/adonet07_02.html
http://www.atmarkit.co.jp/fdotnet/basics/adonet07/adonet07_03.html
を行い、OleDbDataAdapter1を選択した状態で「データセットの作成」で
「新規作成」を行いました。

10 :NAME IS NULL:05/01/09 21:36:52 ID:???
>>9
私は今までその方法でデータセットを作ってきたが、生成時にエラーが
起きたことは一度もありませんでしたです。。。
で、試しにmdbファイルを移動させてみたり、テーブルを削除してみたり、
読み取り専用ファイルにしてみたりしたが、>>7に書いてるような
エラーはでなかった。。。
もうだめぽ。

何かコードを書いたり、表記してたもの以外のオブジェクトを配置して
たりはしてないんだよね?
だったら、プロジェクトファイルとmdbファイルをさらして
もらうしかないかも。。

11 :7:05/01/09 21:58:24 ID:wBFa/DC9
>>10
プロジェクトに関しては新規作成して、まっさらなフォームに対して
行ってます。
mdbはAccess2000です。

わざわざやっていただいてほんとにありがとうございます。

12 :10:05/01/09 22:20:26 ID:???
クラス 'datarow' は、それ自体から継承することはできません
'datarow' は 'datarow' から継承されます。

というエラーメッセージは、ソリューションエクスプローラで
新しい項目の追加でクラスを追加して、以下のソースコードを追加すると
出てきたが、やっぱりデータセットはちゃんと作れる。。。
わからんぽ。誰か助けて・・・(泣

Public Class datarow
Inherits datarow

Public Sub Test2()
Trace.WriteLine("Test2 called")
End Sub

End Class

13 :NAME IS NULL:05/01/09 22:48:30 ID:???
クラス 'datarow' は、それ自体から継承することはできません
'datarow' は 'datarow' から継承されます。

というエラーメッセージは、ソリューションエクスプローラで
新しい項目の追加でクラスを追加して、以下のソースコードを追加すると
出てきたが、やっぱりデータセットはちゃんと作れる。。。
わからんぽ。誰か助けて・・・(泣

Public Class datarow
Inherits datarow

Public Sub Test2()
Trace.WriteLine("Test2 called")
End Sub

End Class

14 :NAME IS NULL:05/01/09 22:52:20 ID:???
クラス 'datarow' は、それ自体から継承することはできません
'datarow' は 'datarow' から継承されます。

というエラーメッセージは、ソリューションエクスプローラで
新しい項目の追加でクラスを追加して、以下のソースコードを追加すると
出てきたが、やっぱりデータセットはちゃんと作れる。。。
わからんぽ。誰か助けて・・・(泣

Public Class datarow
Inherits datarow

Public Sub Test2()
Trace.WriteLine("Test2 called")
End Sub

End Class

プロジェクトの名前やmdbファイルの名前とかかなぁ。。。

15 :10:05/01/09 23:02:44 ID:???
プロジェクトの名前やmdbファイルの名前とかが原因のエラーなのかなぁ。
たまにあるよね。それが原因でエラーだすことって。。

16 :10:05/01/09 23:07:02 ID:???
プロジェクトの名前やmdbファイルの名前とかが原因のエラーなのかなぁ。
たまにあるよね。それが原因でエラーだすことって。。

17 :10:05/01/09 23:12:52 ID:???
プロジェクトの名前やmdbファイルの名前とかが原因のエラーなのかなぁ。
たまにあるよね。それが原因でエラーだすことって。。

18 :NAME IS NULL:05/01/09 23:26:44 ID:???
なんかネットがつながらなくなったから(うちの回線しょぼいから)
再度書き込んだらいっぱい投稿してることになって
しまっていた。。。汗
スマソ

19 :NAME IS NULL:05/01/09 23:30:30 ID:???
なんかネットがつながらなくなったから(うちの回線しょぼいから)
再度書き込んだらいっぱい投稿してることになって
しまっていた。。。汗
スマソ

20 :NAME IS NULL:05/01/10 01:00:31 ID:???
ちょっと餅突け

21 :NAME IS NULL:05/01/10 11:45:59 ID:???
>>7
テーブル名にdataを使ってませんか?
メニュー「プロジェクト」「すべてのファイルを表示」でDataSet1.xsdの下に
DataSet1.vb(.cs) が表示されます。これはスキーマ定義から自動生成されたコードなのです。
その中で(System.Data.)DataRowを継承してテーブル名+Rowという名前でサブクラスを
作ってる箇所があるはずです。テーブル名がdataだとdataRowになりますが
名前空間の使い方が悪くて(System.Data.)DataRowとdataRowがぶつかって
エラーになってしまいます。
C#だと大小文字を区別するのでdataだとOKですねDataだとエラーになると思います。
VS2005のBetaで試すとキチンとSystem.Data.DataRowと完全修飾名から継承してくれ
ますから名前空間がぶつかることはありません。

22 :7:05/01/10 13:29:34 ID:eQhm3LsI
昨日全然つながりませんでした。
レス返せなくてすいません。

10さんほんとにありがとうございました。

>>21
思いっきりテーブル名は「data」でしたので、
変更したら正常に作成されました。ありがとうございました。

みなさんほんとにお騒がせして申し訳ありませんでした。

23 :NAME IS NULL:05/01/11 00:18:37 ID:???
Accessでテーブルを作る際、フィールド名を数字で始まるものに
作ることはできるが、そのテーブルにVBAでADOのrecordsetで
アクセスしようとするとエラーになるんだよなぁ。

名前の付け方が原因の動作不具合って多いよね。。。汗

24 :NAME IS NULL:05/01/11 23:42:14 ID:???
ADO.NETで更新可能なResultsetとかDynasetとかというのをなくしたのは英断だと思うけどな。
更新系はupdate/insert/deleteでやるのが基本だと思ってるので、
DataSetだやDataAdapterを使わなければあんまり変わらん感じですよ。
ResultsetとかDynasetとか、中で何やってるかわからなかったのでなくなってすっきりです。

25 :NAME IS NULL:05/01/13 22:39:35 ID:???
C#でローカルのMSDEにアクセスしています。
使っているテーブルはテキスト、テキスト、イントの3つのフィールドを持つものです。
単純なInsertのストアドを使った場合、またAdapter.Updateを使った場合でも10000行をインサートするのに90秒かかります。
これはまだまだ遅いんでしょうか?
データベースは素人です。

26 :NAME IS NULL:05/01/14 03:04:49 ID:???
>>25
マシンのスペックでだいぶ変わってきますからね。
単純な表に単純な挿入だけならロジックで差が出るとも思えんので
そんなものでしょう、としかいえな。

27 :NAME IS NULL:05/01/14 06:36:43 ID:???
>>26
なんかWEBいろいろみてると、DBの設定とかで(たとえばトランザクション切るとか)いじれなくもなさそうなんです。
けど、片手間だし資料ないしあまり手もかけてられないので・・・
ふつうのパソコンレベルでどのぐらい出るかの大雑把な相場が知りたかったんだけど、規約にあるせいかデータwebにない(´・ω・`)。

28 :NAME IS NULL:05/01/14 07:42:37 ID:???
>>25
90秒が遅いかどうかはあなたがやりたいこと次第で、他人に聞く事じゃないでしょ。いや、マジで。。。

29 :25 ◆hEpdoZ.tHU :05/01/14 08:30:24 ID:???
>>28
10秒なら十分満足ですが、90秒ではもっと早ければいいという感じですが?
素人なので大体の基準を知りたく思い、聞くことがそんなにおかしいんですかね。

30 :NAME IS NULL:05/01/14 13:35:10 ID:???
>>29
聞くことはおかしくないのだがそれは無意味だというのが素人じゃない人たちの回答ですね。
これこういうやり方で書き込んでるが改善できないかって質問には答えられますよ。
MSDEならSystem.Data.SqlClient系をつかおうとか、Adapter使うと挿入後に読み直しのための
わずかなオーバーヘッドがかかるのでsqlCommandを直接使うとか、4000文字(8000byte)以下な
らtextよりvarcharを使おうとか、復旧モデルを変えても速度的な効果はあまりないとかなどなど。
insertの最速を目指すならbcpなのだが運用ツールだからね。普通のアプリじゃ使わない。

31 :NAME IS NULL:05/01/14 16:57:59 ID:???
>>30
でも大体このぐらいのマシンスペックならこのぐらいは行くはずだぐらいの感覚は持ってるんじゃね?

32 :NAME IS NULL:05/01/25 21:27:46 ID:???
デザイナでアダプターやらデータセットやらを配置していくのは、
旧VBプログラマーもすぐにアプリ構築できるようにするためなのかなぁ。
なんか、言語をクラス化させる方向と逆向きのように思うのだが。。

33 :NAME IS NULL:05/02/06 19:21:39 ID:+/ua3Vc0
ADO.NET ってトランザクションを発行した後に、SELECT文を使用することが出来ないんですか?

現在は別セッションを1つ作って対応していますが、リソースが無駄になるからやりたくない。

ADOの頃は出来たのですが・・・・
誰か良いやり方を知りませんか?


VB.NET2003
SQLServer2000


34 :NAME IS NULL:05/02/11 00:59:59 ID:???
>>33
何をしたいのかがちょっとよくわからないですが、
DataSetの中にSELECT文が保持されてるようなものだから、
それをFILLするだけで良いんじゃないでしょうか。

35 :NAME IS NULL:05/03/01 22:12:55 ID:???
age

36 :NAME IS NULL:05/03/02 11:33:02 ID:???
監督お願いです。


D V D で は、 T V で 端 折 っ た 話 を 追 加 & 補 正 し て く だ さ い 。

37 :NAME IS NULL:05/03/08 21:49:18 ID:WrTc1v3o
SharpDevelop で ADO.NET つかえる?


38 :NAME IS NULL:2005/04/02(土) 07:24:19 ID:???
ADO.NET開発が出来るスキルと、ADO開発ができるスキルとでは、
プロジェクト開発を考えると、今は圧倒的にADO開発のほうが
有利に思える。。。

39 :NAME IS NULL:2005/04/04(月) 12:52:16 ID:???
分散環境で楽観排他を使っていた香具師にとっては、ADO.NETは全然違和感が
ないのだが、接続型の選択肢がないのは、それはそれで困るんじゃないか?

40 :NAME IS NULL:2005/04/04(月) 13:17:16 ID:???
>>39
>接続型の選択肢がないのは

ありますが?


41 :NAME IS NULL:2005/04/12(火) 07:13:54 ID:???
非接続型って、メモリの中にテーブルを格納するわけだから、
adoで読み込んだテーブルを変数に格納しておくこととそう変わりが無いような
きもします。

42 :NAME IS NULL:2005/04/12(火) 21:55:21 ID:rOEDApzW ?#
DataSet つかって捜査するのって、
ある程度以上の規模のテーブルを扱うのは不可能ですか?
サーバとのあいだですごい転送量になりそうで。

43 :NAME IS NULL:2005/04/12(火) 22:12:48 ID:???
>>42
>ある程度以上の規模のテーブルを扱うのは不可能ですか? 

クライアントに搭載されてるメモリによる。


44 :NAME IS NULL:2005/04/13(水) 00:31:26 ID:???
>>42
何レコードも走査するような場合はDataSetでなくて
xxCommand、xxDataReaderを使うことになる。
DataSetはO/Rマッピング風なものを狙ってるんだろうなきっと。

45 :NAME IS NULL:2005/04/14(木) 21:52:10 ID:Gq7Mlisl
ADO.NETがオープンソースに

46 :NAME IS NULL:2005/04/21(木) 22:45:48 ID:???
みんな、ADO.NETで、データ接続の部分のクラス化って
どういう設計してるんだろう。。。


47 :NAME IS NULL:2005/04/22(金) 09:02:05 ID:???
>>45 なるわけね〜え?本当になったの?なるわけないよな。
でも mono でももっとたくさんのアプリケーションが動くようになるといいな。

48 :NAME IS NULL:2005/05/01(日) 09:43:57 ID:???
なんかいいサンプルないかなぁ。
いまいちオブジェクトの概念とか使い方がわからんぽ。。。

49 :NAME IS NULL:2005/05/04(水) 23:12:54 ID:???
ttp://www.vector.co.jp/soft/win95/prog/se292504.html

50 :NAME IS NULL:2005/05/05(木) 10:13:22 ID:???
>>49
その同時アクセスの制御って、おかしくないか?
データを書き換えた後、更新しようとした段階で
「できません」ってなって作業が無駄になるのは。

51 :NAME IS NULL:2005/05/05(木) 11:01:20 ID:???
>>50
おかしいと思うなら、それはお前さんの頭がおかしいだけ。

52 :NAME IS NULL:2005/05/08(日) 11:29:30 ID:???
ADOは読み込んでレコードをたどる際はmovenextかmovepreviousしか
なくて、番号がなくて順序だけで操作する考えだったのに対して、
ADO.NETはDataset.DataTable[0].Rows[0][0]
ってな感じに配列の添え字で操作するようになってる。
その考え方がいまいちしっくりとこないし入りにくい・・・

53 :NAME IS NULL:2005/05/08(日) 11:39:33 ID:ycbXXzo5
>>52
非接続型は添字だが、接続型ならADO風だろw

54 :NAME IS NULL:2005/05/09(月) 01:14:37 ID:???
良く考えたらその通りだな。w

55 :NAME IS NULL:2005/05/10(火) 08:14:37 ID:???
そっか。。。非接続型なんだ。
小さなDBにしか、使えないねえ。。。信頼性が。。。

56 :NAME IS NULL:2005/05/10(火) 08:44:31 ID:???
ADO.NETなんて糞だろ


57 :NAME IS NULL:2005/05/11(水) 01:13:31 ID:???
接続型でダイナセット開きっぱなしで操作するより、
非接続型で楽観排他前提のデータ操作のほうが中身が良く見えて
安心できるけどなぁ。データが増えるほどそうだ。
もっとも両方使えたほうがうれしいけどね。

58 :NAME IS NULL:2005/05/11(水) 07:15:56 ID:???
メモリに余裕があって、処理の高速化を図る場合、
ADOで読み取った内容を配列に入れて操作していました。
この配列に格納したデータをソートしたりフィルタをかけたり
できるので、便利だと思います。
あと、データを上書きするまでの編集時は、オリジナルのデータとは、
別なところにおいておくことを設計したりしなくてよくなったから、
便利になったと思います。
でも、思いっきり重いです・・・汗汗汗

59 :NAME IS NULL:2005/05/11(水) 12:32:25 ID:???
ADO.NETが遅いのはマーシャリングにSoapFormatterを使っているせいで、
.NET2.0からはBinaryFormatterに変更でスピードが向上している。
ADO.NETは完全に読み込んでしまってから処理を始めるため、
グリッドコントロールへの表示開始はどうしても遅く感じてしまう。
トータル時間は変わらないはずなのだがこの辺の体感的な部分は重要だと
思うので改善が欲しい。

60 :NAME IS NULL:2005/05/12(木) 06:29:43 ID:???
Windows98の時、「Windows95よりも体感速度が速くなった」っていうのと
同じ機能だな。w

61 :NAME IS NULL:2005/05/12(木) 21:11:28 ID:???
業務系アプリはWeb型インタフェースが流行だから、それに合わせてるんでしょ。
Webフォームがメインになるんだよ、今後は。

62 :NAME IS NULL:2005/05/12(木) 21:55:25 ID:???
と思われていたが、AbobeのFlashフォームとMSのMetroフォームになるのであった。


もちろん最後は(ry

63 :NAME IS NULL:2005/05/15(日) 11:55:26 ID:???
ADO.NETからデータベースに接続する場合、
細かいところ見てたら相性とかでてくるんだろうか。
おなじMS製品のほうがいい、みたいな。

64 :NAME IS NULL:2005/05/15(日) 12:23:29 ID:???
>>63
.NET Data Providerを直接サポートしている場合はデータ型をはじめ
独自実装を大幅に認めてるので相性の問題はあまりないと思う。
(ただしそのせいで異なるデータベース間での移植性は低くなる)
サポートしてない場合はOLE DB経由になるのでデータベース製品と
OLE DBとの相性の問題が当然発生する。

65 :NAME IS NULL:2005/05/15(日) 19:53:53 ID:p5AU4cZr
DataGrid用意してFillしてDataSetマンセーって
言ってる記事多いよな。DataGridだけのアプリが
あるかと・・・

単票形式もコントロールにDataBindingして
ほらすごいでしょ?みたいな記事も
単票が別フォームの場合が説明されてなかったり

フォーム間のデータの受け渡しが載っているのも
あるが、受け渡し方が統一できてなかったり

はっきり言ってADO.NETフレームワークは使うほどに窮屈を感じるのだが



66 :NAME IS NULL:2005/05/15(日) 20:38:27 ID:???
>>65
禿同

67 :NAME IS NULL:2005/05/15(日) 22:30:10 ID:???
.NET2.0で改善してないものかなぁ・・・つーか、早く試しておかないとマズー

68 :NAME IS NULL:2005/05/15(日) 22:34:25 ID:???
DataGridにコンボボックスを貼り付けるのもあらかじめ用意
されてないし、紹介記事読んだだけじゃ複数テーブルの扱い方が
まともに解説されてないから、アプリを組む概要もイメージできない。

はっきりいって、つかいにくいのだが。。。

69 :NAME IS NULL:2005/05/16(月) 17:55:21 ID:/hrRvA3a
稼動1ヶ月ぐらいで遅くなったと苦情が来てたので調べてみたのだが、
条件なしの全件取得でグリッド表示していた。
ADO.NETのアーキテクチャでそれはまずいだろうと思って、
担当のPGに聞いてみたらADO.NET以前もこんなことをやってたもよう。
ADO.NETは使いにくいとかぼやいてる。たとえ密結合でもそれはいかん
だろうと思うのだがどうなんだろう?

70 :NAME IS NULL:2005/05/16(月) 20:37:24 ID:???
>>69
悩む前にとりあえず代案を教えてやれよ

71 :NAME IS NULL:2005/05/18(水) 01:16:34 ID:???
データセットいやなら別に使わなきゃいいじゃん。
IDbConnection,IDbCommand,IDataReaderあたりで
ADO風に接続形の世界で生きることは普通にできる。

72 :NAME IS NULL:2005/05/18(水) 07:32:36 ID:???
やっぱり、開発にかかわるとなると、「自分だけは使わない」とかって
出来ないわけで。。

connectionとadapterあたりまで何とか理解できた。
複数のテーブルを利用してデータの読み取りから更新までおこなう、
DataGridだけとかウィザードのみで終わりじゃない、
チュートリアルってないかなぁ。。


73 :NAME IS NULL:2005/05/18(水) 09:35:29 ID:???
ADOと切り離してDataSetを見てみると、StrutsのActionFormみたいに使えるよな。

Dataアダプタとセットにしてしまうと、ViewとModelがくっつきすぎで、単純な画面ならいいが複雑な結合じゃつかえねー。
一般に売られてる書籍も1つのテーブルから一覧だして終わりだもんな。
そんな仕事はあまりありません・・・。

74 :NAME IS NULL:2005/05/18(水) 16:40:37 ID:V6I2A/hd
まともにDataSetと向き合わないほうがいいよ

DataSetはADO.NETのオマケと思ってないと、

無理に使おうとすると縛られて疲れちゃうから

75 :NAME IS NULL:2005/05/18(水) 16:55:06 ID:???
なんか具体性のない>>74だけど。

プログラムのあらゆる場面で出てくる、データとその集合を取り扱う基本クラスとしては十分だと思うが。
こんなの自作してたらかったるいし。

76 :NAME IS NULL:2005/05/18(水) 23:38:47 ID:???
DBと画面表示が直通だとDataSetもいいんだけどな。
実際にはちょこっと編集したり色々する必要があることが多くて、
DataBind()して、変更された結果をUpdate()するだけ、みたいな
お手軽なケースは少ないんじゃないかな。変更部分はDataSetが
覚えてるし、単純なケースではこれで確かに楽になるんだが。

ま、「簡単なことを簡単にすませる」という要件には適ってると思う。

77 :NAME IS NULL:2005/05/19(木) 00:25:37 ID:???
でも中途半端な上司がこれを触って、なんだ簡単じゃないかと、無茶な工数算出をしたら・・・

78 :NAME IS NULL:2005/05/19(木) 00:56:41 ID:???
ココ読んでると、みな同じような不満をもってるんだなぁと親近感を感じるな。
漏れの方法をアド。
データ処理は参照系処理と更新系処理に分離して、前者にだけデータバインド
使う。データは予め参照用ビューを定義して1テーブルにしとく。
後者には、オプティミスティック制御でトランザクションにして書いておく。
DataSetの機能をそのまま使ってもいいけど、参照系処理
で使ったデータでオ制御をやれば、TP低いシステムなら十分かと。

79 :NAME IS NULL:2005/05/19(木) 00:58:32 ID:???
>>69
>>70
ビュー書いてやれよ。

80 :NAME IS NULL:2005/05/19(木) 09:31:12 ID:???
>>76
直通じゃなくても十分使えないか?

DataSetをStrutsでいうActionFormと考えれば結構使えると思うんだが。
簡単な画面はDataアダプタから直で取る。
複雑な画面は、自分でSQLごいごい書いて、その結果を登録して渡してあげる。

後者のパターンで二元配列だと個々のカラム型が入らないから問題。
構造体(というかクラス)の集合を自作・・・ってこの部分をDataSetでやるだけ。
自分で書くよりビジュアルなのと、DataSetそもそもの機能(検索や更新前値の保持、複数テーブル格納)など使えるし。

入門書にのってるような、FillしてOKなんてのは使う場面はほとんど無いと思うよ。

81 :NAME IS NULL:2005/05/19(木) 12:04:14 ID:???
>>80
そうだよなぁ。ADOの時だってリザルトセットからGirdコントロール
までを通しでそのまま使ったことはあまりなかった。
Visual Studioのウイザードだけである程度のものはできるけど、
実用的なものを作るにはそれなりのコードを追加する必要がある。
Adapterで作成したDataSetをそのままGridの表示に使うことは
まれな気がする。

82 :NAME IS NULL:2005/05/19(木) 15:14:04 ID:GtQz+Y9u
フォームがたくさんあると、
BindingContextとかCurrencyManagerのことも
考えないといけないからめんどくさいね


83 :NAME IS NULL:2005/05/19(木) 15:29:53 ID:???
>81
確かに。ADO.NET無視して、
自前に生っぽく作るほうがいい気がする。


84 :NAME IS NULL:2005/05/19(木) 15:37:21 ID:???
>>83
無視はしなくてもいいけど必要に応じてチョイスして利用しようということ。

85 :NAME IS NULL:2005/05/21(土) 23:47:48 ID:???
AccessVBAのADOに使い慣れてると入りにくいな。
フォーム上のオブジェクトにデータ表示させる段階で結構つまずく。
Comboboxのメソッドで、rowsourceが無いのは分かるけど、
column()とかvalueとかないし。

86 :NAME IS NULL:2005/05/22(日) 00:58:16 ID:???
使い方がちょっとかわるのなら、そのあたりを考慮したドキュメントも
作って欲しいものだ。一太郎ヘルプみたいに。

どうしてこのように使い方が変わるのかの説明がなかったら、
無意味なバージョンアップにしか思えない。
フリーソフトによくある、メニューの位置やデザインが変わるだけ
っていうやつ。今までの操作の慣れが無意味になって、
かえって使いにくくなるだけ。

87 :NAME IS NULL:2005/05/22(日) 01:12:54 ID:???
型指定されたデータセット、カラムにプロパティアクセスできるのは
いいんだが、値が入ってない場合に例外をスローするのは勘弁して欲しいものだ。
カラムの値がNULLなのての、DBじゃ例外でも何でもねえだろ。

88 :NAME IS NULL:2005/05/22(日) 08:12:19 ID:???
>>87
生成されるソース書き換えればOK・・・だけどめんどい。
型指定のエディタで指定させて欲しかったね。初期値とかNULLチェック有無とか。


89 :NAME IS NULL:2005/05/28(土) 23:00:37 ID:???
メモリにがっぽりデータを読み込む仕様にしたのなら、
その制限を自由に設定できる仕様も必要だが、それが
準備されていない気がするわけなのだが。。。

90 :NAME IS NULL:2005/05/29(日) 10:05:18 ID:???
>>89
多分その認識がそもそも間違っている。
今までのRDOとかならそういう考えでのクライアントキャッシュ・サーバーカーソルの考えだけど。
DataSetはそういう考えではなく、あくまでHTTPなどワンタイムセッションのためのキャッシュ。


91 :NAME IS NULL:2005/05/29(日) 15:16:02 ID:???
System.Web.UIWebControls.DataGridはページングの機能あるけど、
裏のDataSetに全部のデータ読み込んでおかないといかんみたいだな。
せっかくページングしてもこれじゃメモリの浪費で意味ねーじゃん。

92 :NAME IS NULL:2005/05/29(日) 17:58:07 ID:???
>>91
せめて、@ITとかでも読んだら?

ちゃんと全部データを読まなくても動作させる方法がある。
ページングに関しても同様に、表示させる件数だけデータを取得して、
ページを変えるときにそのページのデータを読み込ませる手段がある。

此処で言われてるような不満とかって、大抵は使い方を知らない低レベルな技術者ばかり。
実際には問題無く出来るような事を不満として出すんだから馬鹿としか言い様が無い。

93 :NAME IS NULL:2005/05/29(日) 23:02:31 ID:???
複数テーブルを読み込んでデータ更新までやるサンプルが
なかなか手に入らないのも事実。

94 :NAME IS NULL:2005/06/04(土) 12:13:27 ID:???
一太郎ヘルプみたいにしっかりと解説してるドキュソあるか?


95 :NAME IS NULL:2005/06/04(土) 16:03:17 ID:???
とりあえずMSDN以上の求めるのは困難じゃないか?

96 :NAME IS NULL:2005/06/06(月) 00:21:14 ID:???
>>95
マイクロソフトが、新文法を提案するのなら、
それ相応のドキュソを残してもいいじゃないかっていみだよ。

97 :NAME IS NULL:2005/06/06(月) 14:29:32 ID:???
>>96
そういったドキュメントはちゃんとあるよ。
ただ、探し方が悪いだけ。

98 :NAME:2005/06/06(月) 16:01:45 ID:???
>>97
どこよ?

99 :NAME IS NULL:2005/06/06(月) 16:52:48 ID:???
>>98はMSの公式サイトさえも探さない馬鹿

100 :NAME IS NULL:2005/06/06(月) 19:25:00 ID:???
ま、一太郎ヘルプの話はいいとしてさ、
一つのテーブルをグリッドにbindingしておわり。
見たいな解説で終わってる書籍に不満がある人向けの
ドキュメントは無いの?

101 :NAME IS NULL:2005/06/06(月) 19:44:33 ID:???
>>100
だからMSのサイトとか見ないの?

102 :NAME IS NULL:2005/06/06(月) 20:14:21 ID:???
狂気の法案を拉致問題の安部晋三先生と阻止しよう!!【■■2ちゃんねるが消滅します】

とんでもない言論弾圧法案=「人権擁護法」が国会に提出されようとしています!!!
この法案の真の狙いは@政治的には、在日参政権反対の自民右派の消滅であり、
A社会的には、2ちゃんねるをはじめとしたネット世界の一般人の小うるさい言論の圧殺です。
民族(朝鮮・中国・韓国)/ 同和 /信条(宗教・層化・赤化)他に関する一切の差別的発言を禁じるという狂気の法律です。
一刻も早く、防戦する安部先生達に、日本国民の怒涛の援護射撃をお願い致します!!!
※※以下4つともアドレス中に◆を1箇所はさんであります、◆を消去の上、どうか必ずご覧下さい!!※※
http://zin◆kenvip.fc2web.com/
http://blog.live◆door.jp/no_gestapo/
↑↑【凶悪仰天法案の問題点&背景の全て】
http://www.kan◆tei.go.jp/jp/forms/goiken.html
↑↑【首相官邸ご意見フォーム】イメージと違って、ここは非常に効果ありです!
全部読んでくれます、投稿テーマで返事が変わります!
http://meya◆su.jimin.or.jp/cgi-bin/jimin/meyasu-entry.cgi
↑↑【自民党目安箱】事態は急を告げています。文章は簡単でいいので、
国民の「人権擁護法」への反対意思を、とにかく 1 秒 も 早 く 党本部に伝えて下さい!

103 :NAME IS NULL:2005/06/06(月) 21:18:23 ID:???
>>101
MSのサイトは、データセットやデータテーブルなんかを
直接扱う範囲の狭いサンプルしかのってないじゃん。
それらがどんな風に繋がっていくのかがいまいち
イメージできなくてさ。。。

104 :NAME IS NULL:2005/06/06(月) 21:24:05 ID:???
>>103
だから、調べ方が足りないって言ってるんだよ。


105 :NAME IS NULL:2005/06/06(月) 22:57:13 ID:???
101=104か?
まともなドキュメントがない(か邦訳できる技術力がない)のを隠す
のに必死なMS社員でなければとりあえず、あんたが参考になったと
思ったURLを貼ってみれ。
ちなみに俺は英語のドキュメントでも歓迎だ。


106 :NAME IS NULL:2005/06/07(火) 10:09:22 ID:???
>>103
つうか、それをどう使うかなんてMSに聞くことじゃないだろ?
それこそ理解してどう扱うかの設計の問題。
それもマニュアルないとNGってのは、単にあなたのイメージが・・・。

107 :NAME IS NULL:2005/06/07(火) 10:44:32 ID:???
>>78に書いてあるじゃん。
データセットがマルチテーブルなのは、分散DB用途だよ。
シングルDBなら、DBMSのビュー使った方が遙かに楽。

更新は当然SQLで。アップデート・メソッドはトランザクション対応
してないので更新レコードが1件で無い場合には使い物になりませぬ。


108 :NAME IS NULL:2005/06/07(火) 17:20:03 ID:???
データセットがマルチテーブルなのは階層構造を持つデータをそのままの形で扱うため。
これはO/Rマッピングで設定するリレーションと似てると思う。
関連のあるデータを生のテーブルの構造で保持することでAdapterによる書き戻しが意味を持ってくる。
ただしこういう使い方が本格的にできるようになるのは.NET 2.0からの模様。
今の版のADO.NETは不完全な箇所が多く、書き戻し時のトランザクションの制御をはじめ
まともに使おうとすると相当のコードを追加しなくてはならない。
現状AdapterやDataSetは読み取りだけに使用して、更新時は直接SQLを投げるのが現実的だと思う。
全体が見渡せて応用が利くような良くできたドキュメントがないのはADO.NETがまだ不完全なことが
原因だと思う。

109 :NAME IS NULL:2005/06/08(水) 15:58:14 ID:???
>>87
遅レスだが
XSDに

xmlns:codegen="urn:schemas-microsoft-com:xml-msprop">

のようにネームスペースの宣言を手書きで追加して、

<xs:element name="empno" type="xs:string" minOccurs="0" codegen:nullValue="_empty" />

のようにすると、NULLの場合のデフォルト値を指定できるようだ。

codegen:nullValueに指定できる値は
"_throw"→例外(デフォルトの挙動)
"_null"→null
"_empty"→string.Empty
など。
その他、"0"など、リテラルな値もそのまま記述できる。

110 :NAME IS NULL:2005/06/08(水) 23:13:30 ID:???
>>87
>カラムの値がNULLなのての、DBじゃ例外でも何でもねえだろ。

プログラマ的にはなんでもないけど、RDB理論的には例外だよ。あっちゃいけないこと。


111 :NAME IS NULL:2005/06/08(水) 23:59:26 ID:???
>>110
俺ら理論で食えるわけじゃないしなあ

112 :NAME IS NULL:2005/06/09(木) 09:31:12 ID:???
NULL値アクセスでデフォルト例外って、普通に考えて良いと思うけど。
だって、DBのNULL値って表現できない値でしょ。不定。

じゃあ、それをMSが勝手に何らかの値を与えてたら、それこそバグの温床だよ。
とりあえず例外にしておいて、実装するプログラマが例外処理するか、規定値を与えるか考える。


113 :NAME IS NULL:2005/06/09(木) 13:44:20 ID:IPWJYuoX
開発者にとって複雑になるであろう点は、関係者は分かっているのにも
かかわらず、巷の本などの情報ではカバーされていて、開発方法論を
模索しているうちに次のバージョンが出て、過去の欠点は改善&変更されましたみたいな。
これじゃMSの追っかけするのも楽じゃないな。Javaのほうがいいかもしれんとか
思っているところ
どうなんだろうか

114 :NAME IS NULL:2005/06/09(木) 13:45:59 ID:???
まあ、俺はDQNだからね。だからもっと情報が欲しいな、と・・・

115 :NAME IS NULL:2005/06/09(木) 14:08:03 ID:???
MSの追っかけするのも楽じゃないのは同意だが、Javaも楽じゃないぞ。
やっぱりCOBO(ry・・・が一番。

116 :NAME IS NULL:2005/06/09(木) 14:26:47 ID:???
>>112
100カラムぐらいあるテーブルの値参照するのに

毎回

if (dataSet.Emp[0].IsEmpNoNull) {
empNo = null;
} else {
empNo = dataSet.Emp[0].EmpNo;
}

とか

try {
empNo = dataSet.Emp[0].EmpNo;
} catch {
empNo = null;
}

とかやってらんねーじゃん。

ま、型付データセットでは規定値与える手段があるから良しとする。

117 :NAME IS NULL:2005/06/09(木) 14:28:39 ID:???
Javaのおっかけの場合はソース読む必要があることが多くねーか

その分理解は深まるけど、おっかけんのつらいでしょ

まあソース読むという選択肢さえないMSよか自由かもね


118 :NAME IS NULL:2005/06/09(木) 14:39:14 ID:???
>>116
だから文意をきちんと読んでくれ。
この部分の仕様、MSは例外処理をしろといってるわけじゃないんだよ。

MSとしたら、NULL値に何を割り当てても、実際に使う側からしたら文句が出るのは判ってるから、
実装側にそれを決めてもらうという意味で、デフォを例外にしてるんですよ。

>>112に書いたが、数値0とか空文字とかをMSが割り当ててるのがデフォルトだったらもっと問題。

119 :NAME IS NULL:2005/06/10(金) 00:57:09 ID:???
>>113
>>117

何言ってるんだよ! おまいら追っかけるのが仕事だろ。
いつまでも、どこまでも、倒れて立ち上がれなくなるまで
スポ根で追いかけるんだぁー。

120 :NAME IS NULL:2005/06/10(金) 02:05:02 ID:???
技術者が新しいことに興味がもてなくなったら終わりだけど
次々とせっかく学んだものが古くなりつつ
追っかけるだけの人生も空しいなと

後に残るもんならいいんだが、ADO.NETだのなんだのは表層だからね
そういうものの知識はまるで残らないし意味が無くなる

まあでも、追っかけられなくなったら引退の潮時かもな

121 :NAME IS NULL:2005/06/10(金) 16:02:08 ID:???

ADO.NETに限らない話だけど、
.NETは抽象化しずぎて、イマイチ開発の自由度が殺されている


122 :NAME IS NULL:2005/06/10(金) 16:57:36 ID:???
抜け道はあるでしょ
C#ならポインタも使えるし
P/Invokeもある
Managed C++ならもっと自由だ

何にせよ綺麗に抽象化することが出来なかったMFCや
不便さと面倒さばかりが目立つCOMよりぜんぜん筋がいいと思うね

123 :NAME IS NULL:2005/06/10(金) 18:30:38 ID:???
.NET全般まで範囲を広げると脱線しそうだからADO.NETに戻すが、
ADO.NETはADOより機能を絞っていて、特定のモデルを強制しているのは確かであり、
それで自由度が少ないと思われているのは仕方がないことだと思う。
サーバーカーソルはクライアントの数が多いとサーバーへの負荷が大きいため全廃。
クライアントカーソルはクライアントあたりのユーザーが多いとクライアントへの
負荷が大きいため、内部を見渡しやすいフレームワークでの実装に切り替えている。
残ってるのは読み取り専用の前方カーソルと結果を返さないコマンドの実行機能のみ。
利便性より多ユーザー時のパフォーマンスを重視した結果だと思う。
このモデルはWEBアプリのような多ユーザーで少数クライアントの場合に有効であるが、
C/Sのようにクライアント=ユーザーでクライアントがパワフルなケースや、
ユーザーや同時実行が少なくDBに密着したデータ制御をしたい場合など
旧来のクライアントカーソルやサーバーカーソルが有効なケースも少なくないはず。
この辺のフォローをADOを引き続きサポートすることで行うのか、ADO.NETの機能強化で
吸収するのか、まったく切り捨てるのか方向性が見えない。

124 :NAME IS NULL:2005/06/10(金) 22:49:00 ID:???
ADO.NETそのものが切り捨てられるという可能性はどうよ。

125 :NAME IS NULL:2005/06/11(土) 00:11:48 ID:???
>>121
メッセージのルーティングが見えなくなってるよね。
OOが使えるのは良しとして、世界観はVBだな。

>>123
MSSQLServerの大幅な機能強化があるんでしょ、確か。
ストアドにC#が使えるようになるらしいし。
たしか、MSSQLServerって多バーション式だったよね?
だったら、ストアドでサーバ側カーソル作れるんじゃない?

126 :NAME IS NULL:2005/06/11(土) 02:32:55 ID:???
>>125
MSDNを見たらSystem.Data.SqlServer.SqlResultSetというのがあって、
これで更新系の操作ができる模様。これがSQL CLR用っぽいです。
snapshot分離レベルはOracle式のロールバックデータを世代管理する方式ではなく
tempdbにスナップショットを作る方式の模様。基本はあくまで共有ロック式で、
運用中に時間のかかる集計や帳票作成処理をするケースを想定してると思われます。
ADOのサーバーカーソルはこれらの機能で代用できそうですが
SQL2005以外のDBはどうしろというのでしょうかね。

127 :NAME IS NULL:2005/06/12(日) 11:03:46 ID:???
>>107
参照系は、Adapterで複数のテーブルを一つにまとめるSQL文を使って
DataSetに格納してDataBindingsするまでの一連のやり方は分かるけど、
更新系は、具体的にどうやるのかが分かりませんので教えていただけない
でしょうか。DataSetをつかわないんですよね?

128 :NAME IS NULL:2005/06/13(月) 10:02:24 ID:???
>>127
やり方は色々だと思いますよ。
DataSet内のTableの各Row毎に変更状態のステータスと元データ持ってるから、
DataSetをもらって、各Row毎にSQLでごりごりと処理する関数を自作することも可能。
(つうか、実務じゃその使い方しかないだろ?)

129 :NAME IS NULL:2005/06/13(月) 15:52:48 ID:???
>>107
> アップデート・メソッドはトランザクション対応してない
これマジ?

DataAdapterに突っ込むInsertCommand, UpdateCommand, SelectCommand
にトランザクション設定しておいてもダメなの?


130 :NAME IS NULL:2005/06/13(月) 21:15:04 ID:???
>>128
基本的な事で申し訳ないですが、質問させていただきます。

> DataSetをもらって、各Row毎にSQLでごりごりと処理する関数を自作することも可能。
DataSetをもらって、Row毎にfor文などでごりごりと処理する関数を・・
ではないのでしょうか。
ADO.NETは、DataSetに読み込んだテーブル群に対しては、SQL文を
実行できない仕様になっていると思うのですが。


131 :NAME IS NULL:2005/06/13(月) 22:06:08 ID:???
>>130
Rowの状態を見て、追加・変更・削除のSQLを組み立て
ExecuteNonQueryで実行すると言う意味では?




132 :NAME IS NULL:2005/06/14(火) 01:00:18 ID:wt5YTRiZ
>>129
その各コマンドは、Row毎に呼び出される仕組みだったはず。
しかし、
Update の前に、同じコネクション使って begin transaction を送っておけばうまくいったりして。
報告待つ。


133 :NAME IS NULL:2005/06/14(火) 01:07:21 ID:???
>>131
どのみち効率が恐ろしく悪いよね。
ストアドがデータセットを引数に受けてくれたらいいんだけどね。

>>132 案が行けそうな気がしてきた。
Update失敗したらロールバック、成功したらコミットでどうかな。


134 :NAME IS NULL:2005/06/14(火) 01:18:58 ID:???
>>132
余裕で可能
トランザクション効くよ
つか、普通思いつきそうなもんだがな

つうわけで
>>107
は大ウソ

135 :NAME IS NULL:2005/06/14(火) 01:37:30 ID:???
>>134
>余裕で可能
トランザクションをオンにするプロパティかなにかあるのですか?


136 :NAME IS NULL:2005/06/14(火) 02:30:37 ID:???
>>135
DataAdapterの{Insert,Update,Delete}Commandプロパティに設定する
CommandオブジェクトのTransactionプロパティに設定すればよい。
DataAdapterはConnectionが閉じている場合は暗黙に開くので、
前もって
1) ConnectionをOpen()
2) BeginTransaction()
3) Commandオブジェクトにtransactionをセット
をやっておいてから、Update()すればよい。

137 :NAME IS NULL:2005/06/14(火) 03:02:52 ID:???
>>136
余裕とか大ウソとか言ってるので期待してたのだが>>129 で既出だねw

138 :NAME IS NULL:2005/06/14(火) 09:23:54 ID:???
>>130
言葉足らずでしたね。すみません。
皆さんがもう回答かいてますが、元の>>128はDataSetを丸ごと受け取って、サーバ側でForループの意味で書きました。

でもって、少し前に書いてるが、ADOとDataSetを直で連携させて使うってことは考えていない。
DataSetはあくまでデータ受け渡し用のクラスとして非常に有用と思ってるだけ。
SQL操作はサーバ側で従来的に行うのがいいと思うこのごろ。
ADO+DataSetだとDataSetに制約がかかりすぎて使いにくい。

139 :NAME IS NULL:2005/06/14(火) 11:10:55 ID:???
>>136
それだと、複数テーブルのトランザクションを用いたUpdateには
アダプタを一つにまとめておく必要があるってことか。



140 :NAME IS NULL:2005/06/14(火) 14:48:43 ID:???
>>139
同じTransactionオブジェクトをそれぞれにセットすれば複数のアダプタでも
独立したCommandオブジェクトでも大丈夫。その為にConnectionを別にオープンしてるんだろうな。

141 :NAME IS NULL:2005/06/14(火) 14:49:51 ID:???
DataAdapterを活用しようと思ったらかなりのコードを追加が必要になる。
単純なアップデートの場合は>>136の方法で全更新を1トランザクションにすればよいが、
エラーや競合の場合にユーザーに判断を任せる場合はFillError/RowUpdated/RowUpdatingと
いったイベントにかなりのコードの追加が必要になる。
現状では独立したCommandオブジェクトで直接Update/Insert/Deleteした方が安全で早いと
判断する人間が多いのはやむなしだろう。
ウイザードだけで作ったDataAdapterを単純にUpdateすると、途中でエラーや競合が起きた場合
そこで処理を中断してしまって途中まで更新した状態になる。これをみて>>107のように考える
人間がいてもそれもやむなしだと思う。

142 :NAME IS NULL:2005/06/14(火) 17:00:57 ID:???
>>141

ていうか更新がなんか半自動で走っちゃうのはやっぱキモチ悪いって抜きがたい感覚は
どうしてもあるよね。
ウィザードで自動生成したUpdateCommandとかはキモチ悪いから手でSQLは
書き換えるし。

ただ、コード量のことを言うなら、>>128の言うみたいなデータセットの差分取得して
ゴリゴリとかのが結局多くなるっつか、やっぱ無駄な気もするよ。

143 :NAME IS NULL:2005/06/14(火) 17:22:42 ID:???
>>142
まあこの問題はそもそもORマッピングって使えるのか?って事でしょ。


144 :NAME IS NULL:2005/06/15(水) 14:41:19 ID:???
ttp://www.ast-j.com/reference/AstExData.htm
有料だが、こういうのを使ってみた人いますか?

複数のテーブルを参照するデータであっても、
更新・挿入・削除用のコマンドが自動で生成され、更新できるそうだ。


145 :NAME IS NULL:2005/06/15(水) 15:34:27 ID:???
>>144
こういうのって難しいよな。
機能が多機能になればなるほど、フレームとしての自由度が下がるし、習熟が必要になる。
それなら自分でつくったほうが・・・、ってなるし。

146 :NAME IS NULL:2005/06/15(水) 16:12:37 ID:???
狂気の法案を拉致問題の安部晋三先生と阻止しよう!!【■■2ちゃんねるが消滅します】

とんでもない言論弾圧法案=「人権擁護法」が国会に提出されようとしています!!!
この法案の真の狙いは、
@社会的には、2ちゃん/ブログをはじめとしたネット世界の一般人の小うるさい言論の圧殺であり、
A政治的には、拉致問題強硬派&在日参政権反対の自民右派の消滅です。
民族(朝鮮・中国・韓国)/ 同和 /信条(宗教・層化・赤化)他に関する一切の差別的発言を禁じるという狂気の法律です。

この法律の前例の無い恐ろしい特徴は、特定人に関する言動は当然、不特定多数の集団に関する一般的発言
(朝鮮人は〜〜と書くこと)までも圧殺しようとする点にあります。
◆違反者には、無令状捜索・差押、出頭要求、矯正教育が待っており、それを拒否すると、
さらに罰金30万&氏名・住所などの全国晒し上げを食らう(61条)という仰天内容です。

一刻も早く、防戦する安部先生達に、日本国民の怒涛の援護射撃をお願い致します!!!
※※以下5つともアドレス中に★をはさんであります、★を消去の上、どうか必ずご覧下さい!!※※ 
http://zinkenvip.fc2web.co★m/
http://blog.livedoor.jp/no_gest★apo/
http://blog.livedoor.jp/monste★r_00/
↑↑【凶悪法案の問題点&背景の全て】
http://www.kantei.go.jp/jp/forms/goik★en.html
↑↑【首相官邸ご意見フォーム】イメージと違って、ここは非常に効果ありです!
全部読んでくれます、投稿テーマで返事が変わります!
http://meyasu.jimin.or.jp/cgi-bin/jimin/mey★asu-entry.cgi
↑↑【自民党目安箱】事態は急を告げています。文章は簡単でいいので、国民の「人権擁護法」への反対意思を、
とにかく 1 秒 も 早 く 党本部に伝えて下さい!
■□■人権擁護法ストップin日比谷公会堂 6/19(日)12:30〜16:00超大物国会議員登場・皆さん大挙してご参加を■□■

147 :NAME IS NULL:2005/06/15(水) 17:01:05 ID:???
>>145
O/Rマッピングのようなものは使いどころが難しいからね。
データ量を限定すればそれなりに汎用で便利なライブラリやフレームワークが作れるのだが、
データベースの場合データ数が半端じゃないことが多いから、汎用で便利にするための
多少のオーバーヘッドのせいで、致命的に処理速度が遅くなったりリソースの使いすぎたりする。
結局フレームワークとRDBの両方を特性を意識して注意深く使わないと実用に耐えない。

148 :NAME IS NULL:2005/06/15(水) 17:05:14 ID:???
>>147
そうか?
O/Rマッピングに何を使うのか、そしてDBサーバのチューニング次第じゃない?

俺の会社でも3ヶ月ぐらいかけて色々テストしてみたけど、
1億レコードでも検索にかかる時間は平均1秒以内にまで出来たぞ。

149 :NAME IS NULL:2005/06/15(水) 17:11:13 ID:???
ORでもデータベースの索引にヒットした検索なら速いのは当然じゃない?

150 :NAME IS NULL:2005/06/15(水) 17:30:32 ID:JbFI81w8
OdbcDataAdapterをウィザードで作成すると落ちたりしない?

151 :NAME IS NULL:2005/06/15(水) 17:31:46 ID:???
つうか、新規案件でデータ主導型で画面設計してよくてっていうならORマッピング使えると思うよ。
既存DBからの場合はまず却下だし。
画面とビジネスロジックが複雑で、データ操作が多岐でかつデータを集合として扱う場面が多い場合、ORマッピングは使いにくい。
SQLでいうところのWHERE節で集合限定して一括更新みたいな部分が弱すぎ。

152 :NAME IS NULL:2005/06/16(木) 00:50:34 ID:???
>>151
>つうか、新規案件でデータ主導型で画面設計してよくてっていうならORマッピング使えると思うよ。
そこでUML2.0でつよw

>SQLでいうところのWHERE節で集合限定して一括更新みたいな部分が弱すぎ。
将来的には更新可能なビューが増えてDBMS側で対応される希ガス。
それまでの議論だな。

ポジティブかネガティブかわからないレスですまん。



153 :NAME IS NULL:2005/06/16(木) 09:31:34 ID:???
>>152
そこまでいくと、ORマッピングなんぞ考えずに、オブジェクトDBでいいような。

154 :NAME IS NULL:2005/06/19(日) 07:13:27 ID:???
更新系テーブルは、やっぱり単独読み取りして、ローカルで
プログラミングのほうがいいのかなぁ。
ADOプログラマはどのように考えられてるのかしら?

155 :NAME IS NULL:2005/06/21(火) 13:48:24 ID:J+gvxeCG
肝心なところが扱いにくいADO.NET

156 :NAME IS NULL:2005/06/23(木) 20:45:08 ID:Eox5AqoZ
>>154

全部が全部じゃないが、
SqlDataAdapterは表示系、
SqlCommandは更新系と使い分けてる。

157 :NAME IS NULL:2005/06/24(金) 12:36:13 ID:???
開発元は、「更新も自動で出来て便利。」とうたっているが、
その自動機能が実務で使えるレベルじゃないから、
実際は表示系にしか使われないってことなのかな・・・


158 :NAME IS NULL:2005/06/25(土) 11:14:26 ID:???
>>156
使い分けると言うより、
更新系にはアダプタが使えない(使う価値なし)ということですよね。


159 :156:2005/06/25(土) 11:47:47 ID:GM3QDYFi
ま、全部が全部じゃないが、そういうこと。


160 :NAME IS NULL:2005/06/25(土) 12:23:38 ID:???
使い方次第じゃない?

MSが提供してるサンプルでも、参照から更新・削除に至るまで、
SQLServer(MSDN)でプロシージャ作って、それを呼び出す形になってるし。

161 :NAME IS NULL:2005/06/26(日) 14:17:16 ID:???
>>160
それはSQL CLRのことじゃないか?

162 :NAME IS NULL:2005/06/28(火) 00:00:08 ID:???
次のVSは乗り換える価値ありなのかな?
最近VS2003で作ったクライアントをばらまいたんだけど、
2003SRVを使ってるヤシ以外全員が、動かん、と申し立ててきた。
通常のWindowsUpdateでは1.1Frameworkは入らないのね…
2.0も同程度にしか普及しないのかな。OSのバージョンアップの計画もないし。

163 :NAME IS NULL:2005/06/28(火) 22:50:31 ID:???
> 通常のWindowsUpdateでは1.1Frameworkは入らないのね…
こういう仕様なのは確かに困りものですよね。
MS製なのに、なんでこんな仕様なんだろう。

手動で1.1Frameworkを入れたら、再度アップデートでセキュリティー
アップデートしないといけないし。


164 :NAME IS NULL:2005/06/29(水) 00:23:54 ID:???
使いもしないもの勝手に入れられるなんていやだし。

165 :NAME IS NULL:2005/06/30(木) 06:38:35 ID:???
メーカー物PCに入ってるアプリケーション体験版とは違うでしょ。
1.1Frameworkを入れたから不安定になるとか重くなるとか
無いはずで。

166 :NAME IS NULL:2005/06/30(木) 07:49:13 ID:???
WindowsUpdateの「優先度の高い」じゃないが「追加選択」のところでできたような。

167 :NAME IS NULL:2005/06/30(木) 12:16:55 ID:???
>>166
一般ユーザは、追加選択なんて試みないよ。
あんなのを毎回チェックしてるのは漏れたちだけw

168 :NAME IS NULL:2005/06/30(木) 18:47:05 ID:???
ここで聞いていいかわかんないんだけど。。。。

VS.NETでWebフォーム作成してます。
その入力フォームに検索入力して結果のウインド展開します。
その時、SQL実行してDBにアクセスするのですが
どうにもDBを見てないような感じなのです。

strSQL &= " 得意先コード = " & costormerCode & " and " & vbCrLf
strSQL &= " 得意先名 = " & costormername & " " & vbCrLf

With clsDB
.setDataReader(strSQL)
If .objDRD.Read Then
lbl_customercd.Text = .objDRD("得意先コード") & ""
lbl_customername.Text = .objDRD("得意先名") & ""
End If
.objDRD.Close()
End With

と作成しました。
SQL文自体はクエリアナライザで問題なく実行できました。
何が間違っているんだろう。。。誰か教授願います。

169 :NAME IS NULL:2005/06/30(木) 22:54:48 ID:???
clsDBとか言われてもな。
CMyDBって言われても困るだろ?

170 :NAME IS NULL:2005/06/30(木) 23:53:54 ID:???
>>168
もしかして文字定数のシングルクオーテーションが抜けてないか?
strSQL &= " 得意先コード = '" & costormerCode & "' and " & _
" 得意先名 = '" & costormername & "' "

あとは間違いじゃないが、strSQLの代入部分は継続行をつかって1行で書くか、
StringBuilder使う。余計なvbCrLf何ぞつけない。
セキュリティホールになりやすいので変数部分はParameterクラスを使う。

171 :168:2005/07/01(金) 10:13:15 ID:???
ちょっと略し過ぎました、、

>>170
指摘部分と意見参考にしてもう一度見直して、書き直して再TRYします。
dクスです。


172 :168 ◆XrFVZ6ASAs :2005/07/01(金) 12:03:31 ID:???
>>170氏の指摘どおり訂正しました。

SQL文は継続行にて編集。これは問題なくok。
しかし。。。
With clsDB
.setDataReader(strSQL)
If .objDRD.Read Then
lbl_customercd.Text = .objDRD("得意先コード") & ""
lbl_customername.Text = .objDRD("得意先名") & ""
End If
.objDRD.Close()
End With

得意先コードは出るようになったのですが得意先名が出ません。
また、つまってしまいました。
またどなたか指摘、意見もらえると幸いです。

173 :168 ◆XrFVZ6ASAs :2005/07/01(金) 14:40:09 ID:???
自己解決しました。
無事DBアクセスして項目内容Webに出力できました。
どうもお手数でした。

174 :NAME IS NULL:2005/07/02(土) 14:46:49 ID:???
解決したら、どう解決したのか書けよ。
それが公衆向け掲示板で質問するもののマナーだろうが。

175 :NAME IS NULL:2005/07/03(日) 09:23:29 ID:???
あきらめることで解決にしたんだよ。きっと。

176 :NAME IS NULL:2005/07/03(日) 14:27:33 ID:???
項目が一個出てれば、残りも出る。
出てなきゃコーディングミスさ。

177 :NAME IS NULL:2005/07/03(日) 19:45:45 ID:???
得意先名が空白だったとか

178 :168 ◆v.TAYcWkbs :2005/07/04(月) 01:03:08 ID:???
>>174
マナーねえ。。まあ、言わんとしてる事は一理あるとは思うけど。
だけど命令口調でデカイ態度でどうのこうの言われるのは嫌ですね。
いきなり攻撃的な文章描くヤツも十分マナーに反しているとは思うけど。
マナーに関してだけならVB.NET質問スレの住民に見習せたいとは思うけどね。

>>176
その通りです、貴殿の指摘通り単なる凡ミスです。

179 :NAME IS NULL:2005/07/04(月) 10:43:46 ID:???
>>178
まあ一般的な人としての常識をつけてから反論しようね。
聞いておいて出来たからいいなんて失礼千万ですよ。

180 :NAME IS NULL:2005/07/04(月) 13:19:18 ID:???
マナーのなさを指摘されて逆ギレかよ。
典型的なクズだな。

良くニュースで出てるだろ? 注意してくれた人に食いつくやつ。
鏡覗いてみろよ。 そいつがそうだ。そういう顔してるだろ? ww





181 :NAME IS NULL:2005/07/04(月) 17:49:15 ID:???
こういうスレッドが質疑応答の形をとって情報の共有と蓄積をしてるというのが
理解できていればどう行動すればいいかはおのずとわかると思うけどな。

182 :NAME IS NULL:2005/07/07(木) 16:22:23 ID:+rmuXYAF
DataSetイラネ

183 :NAME IS NULL:2005/07/10(日) 02:10:03 ID:???
ADO.NETイラネ
(ODP.NETイラネ)

184 :NAME IS NULL:2005/07/10(日) 19:50:52 ID:???
漏れは無いと困るYO

185 :NAME IS NULL:2005/07/12(火) 02:16:14 ID:???
でっかいテーブルを全走査する最適な方法ってどんなだろ?


186 :NAME IS NULL:2005/07/12(火) 10:09:55 ID:???
>>185
カーソル

187 :NAME IS NULL:2005/07/20(水) 10:19:27 ID:???
SQLサバのテーブル名一覧を取得する、手軽な方法ってあります?
Access で For Each 〜 Next で取得できたみたいに。
何を使ったらいいんだろ・・・
DataAdapterとか使うのかな。

188 :NAME IS NULL:2005/07/20(水) 19:42:19 ID:???
select name from [サーバ名].[データベース名].dbo.sysobjects where tyep = 'U' order by name
をDataReaderで読むってのはダメ?

189 :187:2005/07/21(木) 10:06:08 ID:???
>>188
できた。
でも、dtpropertiesてなシステムテーブルも含まれてしまう・・・
ちょい工夫したら使えそう。
さんkす

190 :NAME IS NULL:2005/07/25(月) 18:16:27 ID:???
ちょっと質問
INで複数(可変個)のデータ取得するときってパラメータどうやって使えばいいかな??
単純に文字列結合するか、単一行取得クエリをパラメータの数だけ投げてデータセットに追加してくくらいしか思い浮かばないんだよね

191 :NAME IS NULL:2005/07/29(金) 00:24:31 ID:0me5458W
あげてみる。

192 :NAME IS NULL:2005/08/02(火) 23:36:59 ID:???
>>190
昔、同じことで悩んだよ

・・・結局わからなくてパラメータ渡すテーブルを作ったw

193 :NAME IS NULL:2005/08/17(水) 20:42:24 ID:???
Access系統は、ADO.NET搭載しない予定なんだろうか。。。
そうなると、VB.NETとVBAは別物としてやっていくことになるのだが。。。

194 :NAME IS NULL:2005/08/17(水) 21:20:58 ID:???
つうか別物だし。でも似たようなものだし、何とかなるって。

ちなみに最悪なのがOfficeシリーズ新顔のInfoPath君。
VBAの替わりにVBScript/JavaScript搭載で、

XDocument.View.Window.TaskPanes.Item(0).HTMLDocument.parentWindow.showModalDialog(...略 )

とかやってHTMLなダイアログボックスを呼び出すツワモノだ。正気か。

195 :NAME IS NULL:2005/08/18(木) 00:21:34 ID:???
教えて下さい。
データを削除する方法として、論理削除と物理削除があると思いますが、
どちらが一般的なのでしょうか?
自分は今まで物理削除しかしていませんでしたが、最近仕事で一緒にやっている人間が
論理削除派なのです。
理由はトラぶった時に対応できるからだそうですが、実際にはどちらが良いのでしょうか?
また論理削除の場合、物理削除や復活機能は付ける物でしょうか?
何卒教えて下さい。

196 :NAME IS NULL:2005/08/18(木) 04:59:59 ID:???
>>195
ADO.NETとは関係ない話だな。質問の内容にあわせてスレを選べ。
論理削除と物理削除も同じ。データを削除するといってもいろいろなケースがあるだろう。
よく分析して必要に応じてどういう方法をとるかは考えろ。

197 :NAME IS NULL:2005/08/18(木) 08:49:59 ID:???
195です。
>>196
ありがとうございます。
ADO.NETとは関係ない話ですね。
もう少しいろいろ考えてみます。

198 :NAME IS NULL:2005/08/18(木) 09:17:14 ID:???
>>195
すれ違いだけど、本当に絶対にいらなくなるならば物理削除。
(余分なデータを置いておく理由はない、不具合の元になる可能性もあるし、性能の邪魔・資源の無駄)

業務上無視するデータとなるならば一端論理削除したあと、ある時点で物理削除。
(赤黒とか過去データの参照で必要になる可能性がある。)


199 :NAME IS NULL:2005/08/18(木) 10:01:13 ID:???
195です。
>>198
スレ違いでも回答頂きありがとうございます。
自分なりに考えたのですが、マスターデータなど物理削除より論理削除の方が良いのですよね。
これが定番の方法!というのがあればこんなに悩まなくても良いのですが。


200 :NAME IS NULL:2005/08/23(火) 18:17:38 ID:???
>>199
定番何て無いのよ。

それと、
マスターの削除、俺だったらストアドで削除レコードを別テーブルに出す。
マスターに残したら整合性が無駄になる。

201 :NAME IS NULL:2005/08/23(火) 18:18:54 ID:???
>>193
ADOさへ使ってないじゃん。

202 :NAME IS NULL:2005/09/07(水) 01:16:42 ID:???
AGE.NET

203 :NAME IS NULL:2005/09/18(日) 20:59:43 ID:???
Webフォーム開発とかあるけど、結局はphpやperlに及ばないって
イメージがあるんだけど、どうなんだろ。

ttp://www.amazon.co.jp/exec/obidos/ASIN/4774116653/249-6926620-2772304

204 :NAME IS NULL:2005/09/18(日) 21:08:30 ID:???
及ばないのは人口だけだな。


205 :NAME IS NULL:2005/09/19(月) 00:34:22 ID:???
>>203
ASPとphpなら同じ系統だから比較できるが、ASP.NETとphpとperlの3つは違いがありすぎて俺には比較できない。
203氏は相当の眼力をお持ちのようだ・・・ADO.NETとASP.NETの違いには節穴らしいけど。

206 :NAME IS NULL:2005/09/19(月) 17:51:55 ID:+3i+6Ufz
>>205
かっこいいな、君。

207 :NAME IS NULL:2005/09/19(月) 18:13:26 ID:???
2005でまた仕様変更がどっさりあるんだよね。
勘弁してくれよ‥‥。orz

208 :NAME IS NULL:2005/09/20(火) 00:04:27 ID:???
なんでこんなに仕様変更するんだろうね。
短期リニューアルによる利益向上のためなかなぁ?
実際に使われるかどうかは関係ないとして、とにかく売れる時に
売ってしまえっていう理論。

209 :NAME IS NULL:2005/09/20(火) 10:13:48 ID:???
でも、よっぽどアークテクチャー意思決定者が奇特じゃない限り、2005なんて使うのは来年夏ぐらいからだろ?
特に2005に飛びつく必然(OSが対応しないとか)があるわけじゃないし。


210 :NAME IS NULL:2005/09/20(火) 12:07:53 ID:???
2003で作ったのが2005環境でもきちんと動くか心配でさ。
MSDNでも赤字で注釈入ってるのがいっぱいあるし。

211 :NAME IS NULL:2005/09/20(火) 13:08:18 ID:???
>>210
それって心配することか?
当然・・・動かないことを前提にするに決まってるんじゃないのか?
MSに何を期待してるのって。

そもそも、今回のバージョンアップ、急いであげる必然性は基本的に無い。
まあ、コンポーネント屋さんだったら別だけど。

212 :NAME IS NULL:2005/09/20(火) 23:15:22 ID:???
>209
来年夏と言うと、2006のアナウンスが出ているのでは?
まぁ、M$の通例から言うと、2006が安定版だろうし。

>211
同感。

213 :NAME IS NULL:2005/09/23(金) 10:38:56 ID:???
つうか、何の為に>>210は.NET使ってるんだろう。

2003だろうが2005だろうが、対応する.NETFrameworkさえPCに入っていれば、
そのバージョンで動くというのがメリットの1つなのに。

214 :NAME IS NULL:2005/09/23(金) 12:37:32 ID:3e+NxVel
>>208
DAO、RDO・・・
今に始まったことじゃないじゃん。
ま、今回は仕様追加だけど。

215 :NAME IS NULL:2005/09/23(金) 14:02:26 ID:???
MSは実質、内部的にいろんな会社があって、
それらの会社が新しい言語を作って、MSが販売してる構造なの
かもしれないね。

MSはWordを0から作ったわけじゃなくて、
Wordの会社を買収して販売して大きくなったわけだし。

216 :NAME IS NULL:2005/09/27(火) 22:01:31 ID:???0
.net重いです。
古いOSで動かないです。
本当に主流になるんでしょうか。。。

217 :NAME IS NULL:2005/09/28(水) 17:31:30 ID:???
>>216
じゃばよりましだとおもうよ

218 :NAME IS NULL:2005/10/08(土) 07:35:25 ID:???
javaとADO.NETはどちらが良いのだろうか。。

219 :NAME IS NULL:2005/10/08(土) 08:55:05 ID:???
比較がとんちんかん。
違うものをどう比べろと


220 :NAME IS NULL:2005/10/08(土) 09:08:35 ID:???
>>218
javaがjdbcなのかHibernateのようなフレームワークなのかはっきりしてもらわないと答えられないね。

ただひとつ思うのは ado.net が adoの上位互換だったら使いやすかったんだけどね。
つまりadoと同等の密結合のAPIをもっててそれプラスで今のado.netの要素があるような作り。

221 :NAME IS NULL:2005/10/08(土) 18:45:49 ID:???
>>220
サーバー側でレコードロックしてループして・・・が出来ないのが致命的だよね。
受注とかでヘッダを検索してそれぞれの明細をいじりながら在庫を引き当ててとか。
レコードロックが出来れば簡単なのに、楽観的ロックじゃ実は難しい。

222 :NAME IS NULL:2005/10/09(日) 13:32:21 ID:???
>>220-221
もう少し調べてみたら?
知識すらない奴、多過ぎ。

223 :NAME IS NULL:2005/10/09(日) 14:52:57 ID:???
>>222
じゃあ、DataReaderがConnnectionを占有するっていう仕様を簡単に回避する方法は?
ADOならば単純に多重ループでカーソル開けたけど。

224 :NAME IS NULL:2005/10/09(日) 18:31:15 ID:???
>>222
System.data.sqlserver ならできるとか言い出すんじゃないか。

225 :NAME IS NULL:2005/10/16(日) 17:18:15 ID:???
すいません 旧バージョンの質問ですが、エクセル相談所で聞いた所VBスレに行くように言われたのですが、
中身からこちらの方なら、と思いましたので。

EXCEL上でADOでパラメータクエリを作成し、複数のアクセスMDBファイルから
クエリでデータを取得するプログラムを作っています。

このときいくつかのMDBには存在しないフィールドに対しても、クエリを実行するのですが、
当然エラーが出ます。

On Error Resume Next
Set rs = New ADODB.Recordset
Set rs = cmd.Execute

としても、次に飛んでくれないで、黄色い表示のデバッグになってしまうのですが・・・・エラーメッセージは以下です。
"実行時エラー'-2147217904 (80040e10)':
1つ以上の必要なパラメータの値が設定されていません。

クエリや他の部分はフィールドが存在するときは正しく動いています。フィールド名を事前に取得して
チェックさせれば良いのでしょうが、このエラーだけresumeが効かないのが理解できません。



226 :NAME IS NULL:2005/10/16(日) 19:22:43 ID:???
>>225
ADO と ADO.NET は名前が紛らわしいけど別物なので関連するスレはこの辺かのう。
スレ立てるまでもない質問・雑談@DB板
ADO DAO など接続方法について

227 :NAME IS NULL:2005/10/16(日) 21:07:30 ID:???
>>226
では下のに当って見ます。すみませんでした。

228 :NAME IS NULL:2005/10/18(火) 16:22:31 ID:???
ADO.NETでヘッダ+明細形式のDBの入力フォームを作る場合
明細部分をDataGrid以外の方法で実装する方法ってあります?

Accessからのアップグレードなんですけど、お客から、明細項目を
横スクロールさせないで見えるようにして欲しいと言われています。



229 :NAME IS NULL:2005/10/18(火) 17:08:02 ID:???
>>228
それはADO.netの問題じゃなく、VB.netのコントロールの問題。プログラムの適切なスレへ。
連結コントロールはGridだけじゃないから。

TrueDBGridとかだと、横スクロール無しで折り返して1レコード複数行みたいなことはできる。

230 :NAME IS NULL:2005/10/18(火) 17:49:02 ID:???
>>229
228です。
確かに、コントロールの仕様絡みの話ですね。失礼しました。
このスレの人ならこの手の実装方法について、経験やノウハウがあると思って
聞いてみましたが、該当スレに移動します。

TrueDBGridって文化オリエント(グレープシティー)の奴ですよね。
標準コントロールだとやっぱり無理なのかな…

231 :NAME IS NULL:2005/10/22(土) 01:30:34 ID:???
これdatasetの下にO/Rマッピングするもんなのか?

232 :NAME IS NULL:2005/10/22(土) 01:47:12 ID:???
今はとりあえずNHibernate

233 :NAME IS NULL:2005/10/22(土) 08:43:36 ID:???
O/Rマッピングのデータをインスタンス化する部分は自作かなんかかな?
インスタンス化するクラスはDataSetでOK。

ただ、O/Rマッピングってそんなに必要か?って思う最近。


234 :NAME IS NULL:2005/10/22(土) 12:42:20 ID:???
更新処理でごりごりSQL生成する手間が軽減するならいいなぁ。

235 :NAME IS NULL:2005/10/22(土) 16:34:29 ID:???
ObjectSpacesだったっけアレが出るまで
ADOでマッピングしてたほうがマシそう

236 :NAME IS NULL:2005/10/24(月) 00:47:19 ID:???
>>221
これってどうなん?

1.
MSSQLの場合は SELECT 〜 WITH (UPDLOCK) 〜
Oracleの場合は SELECT 〜 FOR UPDATE
など、明示的にSQLによってレコードロック

2.
Transactionのisolationlevelの設定によってどうにかする

ってなあたりが回答?

237 :NAME IS NULL:2005/10/24(月) 14:28:23 ID:???
DataReaderを用いて、従来型のADOのようにカーソル処理がしにくいのが問題なのだけど。
DataReaderを開いている間、Connectionを占有してしまい、他の処理ができないのが糞仕様。

ヘッダをカーソルで開いてロックして更新しながら、そのディティールを更新するような処理。
DataSetの楽観的ロックでよければ問題ないけど、それじゃ拙い場合に使えない。

出して頂いた方法をDataSet生成時に用いても、ロックがかかるわけじゃないでしょ。

238 :NAME IS NULL:2005/10/24(月) 15:31:44 ID:???
O/Rマッピングの良いとこ悪いとこ教えて


239 :NAME IS NULL:2005/10/24(月) 15:37:31 ID:???
専門すれがどっかにあると思うけど。

良いところ。
SQLを意識せずにオブジェクトを生成し、オブジェクトの操作だけでDB操作が出来てしまう・・・といいな。

悪いところ。
世の中そんなに美味しいことは無い。
正直、論理設計、画面設計からO/Rマッピングすることを意識しないと、メリットを甘受できないと思う。
半端なマネすると、結局ツールを使って出したオブジェクトへ手を入れる数が増えすぎて。

240 :NAME IS NULL:2005/10/24(月) 18:14:20 ID:ypyJJyo+
>>237
.NET Framework 2.0まで待て。

241 :NAME IS NULL:2005/10/24(月) 20:53:20 ID:???
>>237
悲観的行ロックはかけられるよ。後でUPDLOCKつきSELECTを行う側が普通に
待ちになる。以下のようなサンプルで試した。
まあADO風にカーソルまわしつつというIFではないけれど。
サポートしてないのは、サーバーカーソル自体がリソース食いだからってことも

using System;
using System.Data;
using System.Data.SqlClient;

class UPDLOCK
{
    public static void Main()
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString
            = "server=localhost;database=Northwind;Trusted_Connection=yes";
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT * FROM Customers WITH(UPDLOCK) " +
            " WHERE CustomerID like 'A%'", conn);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        conn.Open();
        Console.WriteLine("Connect完了");
        SqlTransaction tx = conn.BeginTransaction();
        Console.WriteLine("Transaction開始");
        adapter.SelectCommand.Transaction = tx;
        builder.GetInsertCommand().Transaction = tx;
        builder.GetUpdateCommand().Transaction = tx;
        builder.GetDeleteCommand().Transaction = tx;

        DataSet dataSet = new DataSet();
        Console.WriteLine("EnterキーでSELECTします: ");
        Console.ReadLine();
        adapter.Fill(dataSet, "Table");
        Console.WriteLine("SELECT完了");
        dataSet.Tables["Table"].Rows[0]["ContactName"] = "Maria Anders";
        dataSet.Tables["Table"].Rows[1]["ContactName"] = "Ana Trujillo_";
        adapter.Update(dataSet);
        Console.WriteLine("EnterキーでRollbackします: ");
        Console.ReadLine();
        tx.Rollback();
        conn.Close();
    }
}


242 :NAME IS NULL:2005/10/24(月) 21:28:16 ID:???
>>241
多謝です。参考になります。
基本的に>>240さんの言うとおり2.0待ちなんだろうけど、VS2005が安定するのって2007年ぐらいでしょ。w

ADO.netってサーバーカーソルの非サポート以外は好きなんだけどね。
DataSetとか使いやすいし。

243 :NAME IS NULL:2005/10/25(火) 08:00:35 ID:???
SQLServer2005だとテーブル名のフルプリフィックスでも文法エラーにならなくなってる

244 :NAME IS NULL:2005/10/26(水) 23:45:26 ID:???
Microsoft Text Driver経由でCSVファイルにアクセスする場合、
デフォルトのフォーマットではない(たとえばタブ区切り)ときは
該当ディレクトリにschema.iniを作成する必要がありますが、
CD-ROMなど読取専用のためディレクトリにファイルを作成できないときは
どうすればいいのでしょうか・・・


245 :NAME IS NULL:2005/10/26(水) 23:51:16 ID:???
CSVなんて普通に読み込んでSplitしちゃえばいいじゃん。

246 :NAME IS NULL:2005/10/26(水) 23:52:27 ID:???
読み書き可能な手元のディレクトリにschema.iniを用意して、そこに
CSVファイルをコピーしてから処理するってのは?

247 :244:2005/10/26(水) 23:59:09 ID:???
>>245, >>246 様、レスありがとうございます。

もちろん、ファイルアクセスでやることも可能なのですが・・・
Microsoft Text Driverのフォーマットオプションを動的に変えることができるのなら
複数のファイルフォーマットに対応するのも容易かなと思いまして。
また、SQL文をそのまま投げれるのも魅力です。

見えるディレクトリにコピーする方法も有力ですが、
ファイルサイズが大きい場合は、無視できないコストになってしまいそうです。

接続文字列で FORAMT=TabDelimited とか設定できたらラクチンなのになぁ


248 :NAME IS NULL:2005/10/27(木) 08:10:46 ID:???
どとねっとでregexが使えるからText Driverは使わなくなったな。

249 :NAME IS NULL:2005/10/27(木) 14:03:24 ID:???
ttp://www.ken3.org/asp/backno/asp090.html
は参考にならんか?


250 :244:2005/10/27(木) 17:38:36 ID:???
>>249 様、レスありがとうございます。

ヘッダーの有効無効は HDR 属性でできるようですね。
しかし、FMT 属性に関しては、どのサイトのどのサンプルを見ても
FMT=Delimited で固定・・・

いろいろたどってみたところ、「ムリ!」っていう
MSの公式見解出てたんですねぇ。

http://support.microsoft.com/default.aspx?scid=kb;en-us;326548
から引用

You cannot define all characteristics of a text file through the connection string.
For example, if you want to open a fixed-width file,
or you want to use a delimiter other than the comma,
you must specify all these settings in a Schema.INI file.

Access のテキストリンクウィザードとか、どうやってるんだろうなぁ。
読取専用ディレクトリのタフ区切りファイルもちゃんと読み込めるし。
まさか自前なんてことは・・・


251 :NAME IS NULL:2005/10/27(木) 20:47:45 ID:???
NHibernate使えそうだ
DataSet/Tableは表示用ですっきりいけそう

252 :NAME IS NULL:2005/11/06(日) 00:00:10 ID:???
>>245
CSVを俺は普通に読み込んでSplitなんでとてもじゃないけど出来ないね。

文字コードが何なのか?
改行コードは?
カンマをデータとして持ちたい時はダブルクウォートで括る。
ダブルクウォートで括ってる時、ダブルクウォートをデータとしたいときは、ダブルクウォートを2つ書く。
ダブルクウォートで括ってる時、その中で奇数のダブルクウォートが発見された場合の挙動は?
レコードの最後にカンマだけがあった場合、その後に空白のフィールドがあるとみなすかどうか。

まぁ、本来これだけの処理が必要なCSVを単純にファイルから1行ずつ読み込んで、
Split関数でカンマで切って配列なりに入れるプログラマが、この業界に8割は居るんだがな・・・


俺は、.NETが出る以前から、LogParserを使ってる。
勿論、.NETからの使用も可能。

CSVファイルにSQL文使えるのがいいのよね。

253 :NAME IS NULL:2005/11/06(日) 00:01:51 ID:???
>>251
NHibernateって便利そうに思ったんだけど、ふとした疑問が浮かんだんだよね。

例えば、OracleのV$SESSIONとか使いたい場合、やっぱりこのクラスを作るのかねぇ・・・
あとは、DUALとかさ・・・

254 :NAME IS NULL:2005/11/21(月) 10:30:57 ID:???
今SqlCommnadのExecutereaderを使ってSqlDataReaderを取得Reader()でぐるぐる回しながら読み込んでいるのですが、選択した行が多いときに全部検索終わってからExecuteReaderを抜けているような気がします。
選択処理(ExecuteReaderのようなもの)実行しながら選択できた行を順次処理できるようなメソッドはないでしょうか?


255 :NAME IS NULL:2005/11/21(月) 12:25:43 ID:???
ADO.netで一番変わった部分で、MSが押してる部分だから、このスレとMSDN、関連資料をきちんと読むことをお勧めします。


256 :NAME IS NULL:2005/11/21(月) 13:33:41 ID:???
>>255
了解です。なんかちょっとつかいたいだけなのにいろいろ変わってて疲れた・・・orz

257 :NAME IS NULL:2005/11/21(月) 13:43:55 ID:???
>>256
Framework 2.0になったら、また変わるから。orz

258 :NAME IS NULL:2005/11/21(月) 15:13:32 ID:???
>>257
今2.0です。orz

259 :NAME IS NULL:2005/11/27(日) 00:06:29 ID:???
ADO.netで非同期クエリは出来ますか?

260 :NAME IS NULL:2005/12/25(日) 18:03:34 ID:???
やっぱ、vb6までの遺産は全部捨てる覚悟でないといけないのかなぁ。。。悩

261 :NAME IS NULL:2005/12/25(日) 19:12:41 ID:???
過去の資産は捨てずに「繋ぐ」のが.NET的なんじゃねーの

262 :NAME IS NULL:2005/12/25(日) 19:59:31 ID:???
コンパイルしてもエラーが100とか出るプロジェクトを
前に、混乱しております。。。悩

263 :NAME IS NULL:2005/12/25(日) 20:14:15 ID:???
vb6のプロジェクトをウィザードで.NETに変換したとか?

264 :NAME IS NULL:2005/12/26(月) 01:51:04 ID:???
それ以外に移項の方法ありますか?

265 :NAME IS NULL:2005/12/26(月) 09:22:19 ID:???
VB6でも層を意識して分けてるプログラムだと、移植率高いよね。


266 :NAME IS NULL:2005/12/26(月) 17:25:40 ID:???
フォームやファイル入出力やActiveXを使っていない場合は移植どころかほぼそのまま動くが、
そんなプログラムはほとんどないよなぁ。
ADOはそのままCOM呼び出しに変更されるだけだよな?ADO,NETには変えてくれなかったと思うが。

267 :NAME IS NULL:2005/12/26(月) 19:38:17 ID:???
低機能のものに置き換えは無理だわさ。

268 :NAME IS NULL:2005/12/26(月) 19:55:50 ID:???
テーブルのある列に、同じ文字列が何行にも渡って入っていて
その文字列が切り替わったことを判断するには、どうすればいいですか?
例えば
M001
M001
M001
M001
M001
M001
M001
M002
M002
M002
M002
M002
M002
M002
M002
M003
M003
M003
・・・みたいな感じです。
使っている言語はC#.NETなんですが、
if(dr["列名"].ToString() == "M002"){
//キーが変わった時の処理
}
なんてやってしまうと、汎用性がなくなるもので・・・
適切な方法ご教示願います。

269 :NAME IS NULL:2005/12/26(月) 20:54:31 ID:???
前の値を変数に代入しておいて、判定をしてはいけないの?

270 :NAME IS NULL:2005/12/26(月) 22:35:57 ID:???
>>269
ありがとうございます。
解決致しました。

271 :NAME IS NULL:2006/01/07(土) 01:14:30 ID:???
age

272 :NAME IS NULL:2006/01/11(水) 07:17:30 ID:???
TrueDBGridって日本じゃ使われてるけど、へぼいよね。
たぶん、ソース見たことないけど、作りもへぼそう。たくさん使われてるから、
バグはあまり出ないかもしれんが、無理やりバグフィックスしてそう。
昔あるGridコンポーネントのソース見たけど、そりゃひどいもんさ。6万くらいのやつかな??
それに対して俺のお勧めはhttp://www.devexpress.com/ ここのは信頼できる。
まぁ、まだ発展途上だから、バグが結構報告されているけど、すぐにFixしてくれるし、
サポートもすごいよい。でも、とりあえず、機能拡張はSTOPして、Fixに専念してくれよ。



273 :NAME IS NULL:2006/01/17(火) 14:48:12 ID:zHe27niw
MSDataSetGeneratorで自動生成された型付データセットをテキストボックスにデータバインドしてみたのですが、
Textプロパティが変化してくれません。(エラーはでない)
SqlDataAdapterで拾ってくるときに型付きでない普通のDataSetを使用すると上手くバインドで着ました。
何か解決策をご存じないでしょうか?

SqlDataAdapter da = new SqlDataAdapter("Select 〜","Server=〜");
Dataset1 ds = new Dataset1();
//DataSet ds = new DataSet();//こっちだと問題なく動作する
da.Fill ( ds );
textBox1.DataBindings.Add ( "Text", ds.Tables[0], "Meishou");


274 :NAME IS NULL:2006/01/17(火) 18:42:28 ID:???
>>273
ds.Tables[0] コレクションの0番に目的のテーブルが入ってないのでは。
ds.テーブル名 で指定してみたらどうです。

275 :273:2006/01/17(火) 21:32:58 ID:???
>>274
どうもです
いまちょっと試せる環境じゃないので明日試してみます。
でもコメントの部分を入れ替えるとバインドした時点で0行目の内容が適すとボックスに表示されるので
なにか型付DataSetが悪さをしているのかなぁと思ったのですが。
普通に型付DataSetでもデータバインドは可能なんですよね?
(ググっても出てこないところをみるとそうだと思うのですが・・・)

276 :NAME IS NULL :2006/01/19(木) 01:08:06 ID:???
質問よろしいですか?

ADO.NET 2.0使って検索画面作ってんですが、
非接続型の場合は
TableAdapterでパターン分だけクエリ作って

FillXXXX(DataTable , para1, ....)

を、それぞれ実行するしかないんですか?

ADO.NET 1.xの時みたいにDataAdapterの
CommandTextをソースから書き換える方法ってないですか?
(動的にSQLをゴリゴリしたい)

どうでしょうか?


277 :273:2006/01/19(木) 07:43:36 ID:???
インフルエンザでダウン中・・・
直ったら確認します....

278 :NAME IS NULL:2006/01/19(木) 09:27:57 ID:???
>>276
AdapterのReaderにDataReaderを設定できるようになったんじゃなかったんだっけ?


279 :NAME IS NULL:2006/01/19(木) 13:03:43 ID:???
DataSetにデータを取得した後、そのデータをグループ化して使う方法はないでしょうか?
DataViewあたりにそんな機能があれば良かったんだけど・・・。

280 :273:2006/01/24(火) 20:39:09 ID:???
>>274
まさにそのとおりでした。
型付Datasetにテーブルを一個しか追加していなかったのでds.Tables[0]と
決め付けていました。
調べてみるとds.Tables.Count=3になっていて、
ds.Tables[1]もしくは生成されたテーブル名で正しくバインドできました。
初歩的なミスでした。ありがとう

281 :273:2006/01/24(火) 20:48:20 ID:???
ちなみに一番の原因は
da.Fill ( ds, "テーブル名" );
とテーブル名を指定しなかったのが原因でした。
こうすればTables.Count=1になりました。お騒がせしました。

282 :NAME IS NULL:2006/01/26(木) 14:18:34 ID:???
>>5
1年前のレスにマジレスだが、
当初はXDO(XML Data Object)という名前にしようとしたんだけど、
開発者側が「また新しい3文字略称かよ」と言ったので、ADO+という名を経て
ADO.NETになったそうだ。
以上、本屋で売ってる「ADO.NET専修講座」より。

俺も最近ようやく基礎的な考え方がわかったきたよ。遅すぎ・・・


283 :NAME IS NULL:2006/01/26(木) 17:06:57 ID:???
皆さんはUpdateメソッド使ってる?
うちはFillでDataSetに取り込み&検証したあとは、ExecuteNonQuery
で直接書き戻してるよ。パラメータ設定とか面倒だしさ。

284 :NAME IS NULL:2006/01/26(木) 22:14:23 ID:???
>>283
> うちはFillでDataSetに取り込み&検証したあとは、ExecuteNonQuery
> で直接書き戻してるよ。パラメータ設定とか面倒だしさ。
うちもそんな感じ。
テーブル単体で読むことなんてほとんどないから、
JOINしたりしてると目的と違うテーブルが更新されないか、とか心配で怖くて使えません。


285 :NAME IS NULL:2006/01/26(木) 22:15:54 ID:???
>>282

>>以上、本屋で売ってる「ADO.NET専修講座」より。

この本は使えないから買わないほうがいい。
VBマガジンの連載(但しN田のは除く)の方がまだ役に立つ。





286 :NAME IS NULL:2006/01/27(金) 09:20:58 ID:???
>>284
その辺りは何処までADOの考えに沿ってシステムを作るかだろうね。
O-Rマッピングツールとして使うと考えれば、そのツールがAdapterであってそれに載ればよいと。
そうじゃない思想(旧来型のクラサバ)の延長で考えると、ReaderとExecuteでやればOK。

287 :NAME IS NULL:2006/01/31(火) 22:43:38 ID:xYIDIRU6
今更だがプログラミングADO.NETを購入してきた。
明日からちょっと節約。

288 :NAME IS NULL:2006/02/02(木) 00:26:15 ID:l446bGbp
学校の授業で「100万件データがあるテーブルにアクセスして、
クエリなげるプログラム作って、レスポンスタイムを短くするように
チューニングしろ」って課題がでたんだが、普通はどれくらいの時間
かかるんかな?
ADO.NETでSQL Server2000に接続します。テーブルの列は2,3列くらい。

289 :NAME IS NULL:2006/02/02(木) 00:52:11 ID:???
クエリによるだろ。
何するのか、もっと説明しる。

290 :288:2006/02/02(木) 01:41:51 ID:l446bGbp
>>289
そのクエリの内容をどうしようかなーと今考えているわけで。
普通にselect文しか思いつかない・・・OTL
レスポンス短くする(パフォーマンスチューニング)するには
何をしたらいいんだろう?
インデックスのつけ方以外で。

291 :NAME IS NULL:2006/02/02(木) 09:43:28 ID:???
あんたの質問は、きれいな絵を書けって課題が出たけどどうすれば?って聞いてるのと同じ。


292 :NAME IS NULL:2006/02/02(木) 11:19:07 ID:4Msp1fkq
DataViewのFindメソッドを使いたいけど、Sortプロパティは
変更したくない、という状況です。

Dim i As Integer = 0
While (i < View.Count)
If View(i)("列名") = 値 Then Exit While
i += 1
End While

と、値が見つかるまで虱潰しに探す処理しか思い浮かびませんが。
もっとスマートな方法はないですか?

なお、検索したいビューの行数は数行〜数千行程度です。

293 :NAME IS NULL:2006/02/02(木) 12:52:08 ID:???
別のViewって起せないんだっけ?


294 :NAME IS NULL:2006/02/02(木) 13:14:03 ID:???
同一Tableから複数のDataViewを、というのは可能ですが。
今回、検索にかかった行のインデックスを得たいのです。

295 :NAME IS NULL:2006/02/03(金) 09:20:39 ID:???
何がいいたいかも何がやりたいかも判らん。
もっと客観的に伝わる言葉で書いてくれよ。
行のIndexって何?

296 :NAME IS NULL:2006/02/03(金) 12:15:05 ID:???
開発環境:VB.NET + ADO.NET

DataViewオブジェクトのFindメソッドは、Sortプロパティで指定した
列を検索して、DataView内で検索にかかった行のIndexを返す。

DataView内
(ID) (検索列)
5  非検索値
2  検索値
7  非検索値

(コード)
DataView.Sort = "検索列"
Dim Index As Integer = DataView.Find("検索値")
If Index > -1 Then Debug.WriteLine(CStr(DataView(Index)("ID")))

(出力)
2


ただ、この方法だとSortを設定しないといけないので、DataView
内の元のソート順を崩してしまうことになって困る。
よって、Sortプロパティを設定しないままで同等の処理を行いたい。

ということです。

297 :NAME IS NULL:2006/02/03(金) 12:18:26 ID:uxDQ2asr
行のIndexというのは、上の例の場合、

Index (ID) (検索列)
1   5  非検索値
2   2  検索値
3   7  非検索値

のようにDataView内部で順に振られた順序のことを指しています。
正しい呼び方が他にあるのかもしれませんが。

上、age忘れ失礼しました。

298 :NAME IS NULL:2006/02/03(金) 12:20:45 ID:???
なんでIndexが必要なの?
(IndexってDataTableの行番号?)
別にデータにアクセスするならView越しでOKじゃん。


299 :NAME IS NULL:2006/02/03(金) 20:05:12 ID:???
行インデクサかID列か、どちらが欲しいのかわからないよ。

300 :299:2006/02/03(金) 20:12:34 ID:???
ああ、ごめん。DataView内の行を特定するインデクサが必要なん
だね。んで、見つけたあとに何をするかがわからないな。

ひとつしかヒットしないようなユニークな検索値なら、DataView
に抽出した時点で一行しか出てこないだろうし、それならインデク
サ0を直接参照して、好きなように読み書きできるかと。

301 :NAME IS NULL:2006/02/12(日) 00:02:12 ID:???
age

302 :NAME IS NULL:2006/02/12(日) 00:39:55 ID:???
Enterprise LibraryのData Access Application Block使ってる人いる?
ちょっと触ったところだと、ADO.NETの便利なラッパって感じなんだけど。

303 :NAME IS NULL:2006/02/17(金) 01:52:44 ID:???
何処で質問するべきか迷ったのですが、使ってるのがVB.NETなのでここで質問させてくださいm(._.)m
【質問内容】
Key値としてユニークな番号を発番したいのですが、良い方法というか一般的な方法ってありますか?
自分で考えれるのはMAX値を一旦取得してその次の番号から発番する方法しか思いつかなかったのですが、
消したり追加したりを繰り返すと空き番号が増えてもったいない気が・・・

環境はVB.NET+MSDE(将来的にはSQL server)です。
初歩的な質問だと思いますがご教授ください


304 :NAME IS NULL:2006/02/17(金) 07:28:58 ID:???
空き番号を気にしないならキーにIDENTITYを属性を指定するのが一番パフォーマンスがいい。
MAX+1でやるなら同時実効性が若干損なわれるから、それでもかまわないかよく検討すること。
途中にできた空き番号の再利用までしたいなら発行可能な番号をすべて書き出したテーブルを作って、
使用中かどうかを管理する。または不要になった番号だけを再利用テーブルに書き出して管理する。

PS.教授は留守だ。

305 :NAME IS NULL:2006/02/17(金) 10:19:19 ID:???
レコード削除などで発生した空き番号を再利用するのは、よく注意
しておいたほうがいいよ。ソート後の処理や古いリレーションがく
っついたりして悪さをする可能性が無きにしもあらず。

うちは一度発行したインデックスを再利用することもレコード削除
することもしない。消すときには専用のフィールドに使用不可を表
すデータ(日付)を入れておくだけ。

306 :308:2006/02/17(金) 13:44:26 ID:???
ありがとうございます。
確かにMAX値を取ってくると弊害が出てきますね。

教えていただいた方法でやってみます。


307 :NAME IS NULL:2006/02/22(水) 15:27:43 ID:58nXANJY
多分非常に初歩の質問だと思うのですが、、、、
ADO.NETで、別マシンのpostgresqlにODBC接続してSQLを発行したいのですが、
うまくできません。

Private Sub Button1_Click()
Dim strConn As String
Dim strSql As String
strConn = "Driver={PostgreSQL ANSI};database=XXX;..(省略).."

Dim cmd As New Odbc.OdbcCommand
Dim conn As New Odbc.OdbcConnection(strConn)

conn.Open()
conn.BeginTransaction()
strSql = "CREATE TABLE (CUSTOMER USER_BANGO INT(2))"
conn.CreateCommand.CommandText = strSql
conn.CreateCommand()
cmd.CommandText = strSql
cmd.Connection = conn
cmd.ExecuteNonQuery()
conn.Close()
Return

実行すると、いかのメッセージが出てしまいます。
(勿論)テーブルは作成されません。

System.InvalidOperationException はハンドルされませんでした。
Message="ExecuteNonQuery は、コマンドに割り当てられた接続が保留状態であるローカルのトランザクションにあるとき、トランザクション オブジェクトを持つコマンドが必要です。コマンドの Transaction プロパティがまだ初期化されていません。"
Source="System.Data"
StackTrace:(省略)
ちなみに、VS2005です。
どなたか、どうすればSQLが発行できるのか(どこが間違っているのか)
おしえてもらえないでしょうか。



308 :NAME IS NULL:2006/02/22(水) 15:37:18 ID:???
よく知らんが、conn.BeginTransaction() の戻り値を
cmd.Transaction にセットするんじゃないの?

309 :307:2006/02/23(木) 06:40:05 ID:JubXzwgA
308>
ありがとうございました。教えていただいたことで解決しました。
動作するようになったコードは以下です。

Private Sub Button1_Click()
Dim strConn As String
Dim strSql As String
Dim cmd As New Odbc.OdbcCommand
Dim conn As New Odbc.OdbcConnection
Dim transac As Odbc.OdbcTransaction

strConn = "Driver={PostgreSQL ANSI};database=XXX;..(省略).."
conn.ConnectionString = strConn
conn.Open()
transac = conn.BeginTransaction()
cmd.Connection = conn
cmd.Transaction = transac
cmd.CommandText = strSql
cmd.ExecuteNonQuery()
transac.Commit()
conn.Close()
Return


310 :307:2006/02/23(木) 06:42:48 ID:JubXzwgA
自己レスです。
309で、strSqlにSQL文を設定する処理を書き忘れてました。


311 :NAME IS NULL:2006/03/04(土) 22:06:46 ID:???
保守

312 :NAME IS NULL:2006/03/04(土) 22:20:53 ID:fUeZIVcy
。NETは伸びるでしょうか?

313 :NAME IS NULL:2006/03/06(月) 11:39:48 ID:???
コボル、VB、JAVAみたいにこれっていう決め手が無い時代になるんじゃないの?
基本的な言語実装はJAVAも.netも大差ないんだから、両方使えて当然の感じじゃないと。

314 :NAME IS NULL:2006/03/06(月) 14:58:14 ID:g8ZwN0DS
エラーメッセージ
「は、コマンドに割り当てられた接続が保留状態であるローカルのトランザクションにあるとき、トランザクションオブジェクトを持つコマンドが必要です。コマンドのTransactionプロパティがまだ初期化されていません。」
を受け取りました。

Win XP Pro
.Net Framework SDK 1.1 ASP.NET ADO.NET VB.NET

この環境でWebアプリケーションを開発中、メインプログラムにはデータベースのロジックは一切組み込ます、ユーザーコントロール(.ASCX)内に処理を定義し、メインプログラムから都度サブルーチンをCallしています。
(データベース更新処理は一テーブル一レコード単位でサブルーチンをCallして処理しているのですが、親子関係のレコードの更新は一番最初の処理で接続とトランザクションを設定し、一組の中の最後のレコード処理でコミット後接続断をする必要があります)

ASCX内のコーディングは下記のとおりです:

<%@ Control ClassName="UserMaster" Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Odbc" %>
<script runat="server">
Public con As New OdbcConnection( _
ConfigurationSettings.AppSettings("conStringMySql"))
Public cmd As New OdbcCommand
Public trans As OdbcTransaction

Public Sub ConOpenWithTransaction()

con.Open()
trans = con.BeginTransaction()
cmd.Connection = con
cmd.transaction = trans
End Sub

Public Sub UpdateTable()
Dim intUpdateCtr As Integer
cmd.CommandText = strSQL (Updateの内容を定義済)
intUpdateCtr = cmd.ExecuteNonQuery()
.
.

End Sub

トランザクション処理は初めての経験でメッセージの内容も余り理解できていません。例えば「接続が保留状態」は正しい状態なのか?「プロパティがまだ初期化されていない」はどこで初期化するのか、頭書にしているのではないかと思っていましたが?

前述の#309を参考にさせていただきましたが、まだ何かが足りないみたいです。
「接続、トランザクション開始処理」 と「更新処理」を別サブルーチンで実行しているのに問題がありそうですが、将来データベースサーバーの移行を考慮して、是非分割して処理をしたいのです。
トランザクション処理に詳しい方、アドバイスいただければ幸いで。


315 :NAME IS NULL:2006/03/07(火) 09:46:09 ID:???
分割する場合、分割した関数にConnectonとTransを渡せば良いだけじゃないの?

316 :NAME IS NULL:2006/03/07(火) 19:44:56 ID:XuXd+j4l
#314 を質問したものです。 本件はトランザクション処理途中にSelect文が入っていました。それを回避することにより、問題は解決しました。
改めて分割処理で別の問題が発生しました。
Insert と Update 処理でフィールドがシフトして値が正常にセットされません。
ExecuteNonQuery文を実行する手前で設定されたSelect文の全てを表示させると
値は正しく設定されているのですが、実行すると値がひとつ後ろにシフトされてしまいます。
実情は正規のキーの値がキーフィールドと次のフィールドにも設定されている状況です。
現在Mysqlのデータベースで cmd.Parameters.Add("@fieldid",value)を指定してテストしています。
アトバイスあればお願いいたします。

317 :NAME IS NULL:2006/03/08(水) 00:53:53 ID:???
>>316
データベースファイルに対して、ExecuteNonQueryの直前で生成し
ているSQLを直接実行した結果はどうなってるか確認した? 単に
SQLを読んだだけで「正しく設定されてる」とか思ってない?

Common SQL Environmentなんかで直にSQLを動かしてみよう。

318 :jaxonnoby:2006/03/08(水) 18:27:12 ID:03WY8NAz
>>317
アドバイス有難うございます。
残念ながらデバッグ環境を持っていませんのでどうやれば良いのかわかりません。
ExecuteNonQueryのSelectではなく、cmd.Parametrs.Addに設定する値をResponse.Writeで表示して確認しただけです。
どうやらデータベース接続、トランザクション開始、と更新処理を分割したサブルーチンで実行しているところに
問題がありそうなんですが、最初に述べましたようにデバッグ環境がないので見当がつきません。


319 :NAME IS NULL:2006/03/09(木) 09:30:30 ID:???
デバック環境持ってないってどういう状態よ。
今だったら幾らでもフリーでそろえられるでしょ。

320 :jaxonnoby:2006/03/09(木) 16:43:18 ID:HS5VT+JN
319>>
今回の問題が発生するまでは全くデバッグ機能を使うことなくソースエディタとインターットだけの環境でプログラム開発ができていました。
一度Visual Web Developer 2005 Expressを利用しようと考えましたが、利用開始するまでに、手間がかかりそうだったので、利用をやめました。
おかげさまで、今回の問題は更新サブルーチン内のパラメータ設定でパラメータオブジェクトを
一更新処理の前にクリアしていないことにより、過去のパラメータが累積されていたことがわかりました。
いろいろアドバイス有難うございました。


321 :NAME IS NULL:2006/03/10(金) 11:18:52 ID:???
>>320
データベースの更新直前に、どんなSQLコマンドが実行されるのかを
確認していれば、すぐに解決できた事例ですね。パラメータを使って
いると、そのへんの確認が面倒なんでうちでは自力で生成しています。

ウィザードとかパラメータは、見えないところが多いから正直使いに
くいと思う。トラブった時に追跡するのがたいへんだしさ。

322 :NAME IS NULL:2006/03/11(土) 03:33:39 ID:???
というか.NET Framework SDKに超立派なGUIデバッガDbgCLR.exeがついてるだろ

323 :NAME IS NULL:2006/03/13(月) 14:26:43 ID:9SgU+AsX
質問でつ。

あるADO.netを用いたアプリから、SQLSrv2kに、どれぐらいの頻度でどんなSQL文が投げられているのか
知りたいのですけど、これをモニタする便利な機能などあるのでしょうか?
アプリのパフォーマンスアップのために、キャッシュなどを使い始めたのですが、どの程度効いてるのか
知りたいんです。

該アプリが使うデータベースやテーブルは決まっており、他のアプリがそれを使うこともないので
データベース側でモニタしても構わないのです。

簡単なトリガが何かを書けば可能なのでしょうか? よろしくお願いしまつ。


324 :NAME IS NULL:2006/03/13(月) 21:46:47 ID:???
>>323
SQL Profiler

325 :NAME IS NULL:2006/03/14(火) 11:38:28 ID:???
>324
thx!
こんなのがあったんだ。7年近く使ってきたのに…
思ってた通りのSQLが流れてて満足しました。
ありがとうございました。

326 :NAME IS NULL:2006/03/15(水) 00:00:56 ID:???
>>325
こんなに喜んでもらえると嬉しいもんだな。
実行プランも一緒に使って、チューニングしてくださいね。

327 :NAME IS NULL:2006/03/16(木) 03:58:55 ID:???
>>325
7年付き合ってた彼女が、ニューハーフだったと気づくことと同じレベル。


328 :NAME IS NULL:2006/03/16(木) 11:41:56 ID:???
そいつはうれしいな

329 :NAME IS NULL:2006/03/17(金) 00:45:02 ID:???
別スレで質問したのですが教えないと言われてしまいましたので、
こちらで質問させてください。
排他ロックについての質問です。
SQLSERVERにて、
sqlcommand.CommandText="select * from 'テーブル名' with(tablockx,tablockx,holdlock)"
でテーブルロックがかかると思うのですが、
DB全体をロックしたい時は、どのような構文になるのでしょうか?
ご教授お願いします。

330 :NAME IS NULL:2006/03/17(金) 05:36:39 ID:???
Datasetが一気にすべてのレコードをサーバーからもってくるの何とかならんかな。
つまり、非接続型とかいう。Webアプリ前提の仕様やめてけれ。



331 :NAME IS NULL:2006/03/17(金) 08:50:21 ID:???
>330
DataReaderでガリガリ頑張れ!

332 :NAME IS NULL:2006/03/17(金) 09:25:18 ID:???
>>330
何が問題なのか判らんが。
画面一覧に表示してる間、レコードロックでもかけるの?


333 :NAME IS NULL:2006/03/17(金) 10:36:35 ID:???
DBメンテと称してケーブル引っこ抜いてローカルで作業するとか

334 :NAME IS NULL:2006/03/17(金) 13:45:22 ID:???
>>332
例えば、CSEみたいなSQL発行ツールを作ると、SELECT文で100万件返されると、
全レコード返るまで、結果が見れん・・・


335 :NAME IS NULL:2006/03/17(金) 14:15:04 ID:???
いや、発行ツールとはいかなくても、例えば、過去の売上データをユーザーが指定した
条件によって検索する画面とかで、レコード件数が多いと明らかに、不利だ。
クラサバアプリでは、非接続型は明らかに、つかえん。
もうちょっとインテリジェンスにレコードが要求されたら、その都度サーバーからフェッチしてほしいものだ。
ClickOnceなどの自動配布機能を提供するなど、MSもスマートクライアントに時代は移ると呼んでるふしがあるが、
非接続型じゃ駄目だ。





336 :NAME IS NULL:2006/03/17(金) 14:32:00 ID:???
別にそれは非接続型云々関係ないように思うが。
もし検索を件数で打ち切りたいなら、DataAdapterを使わずにDataReaderで取得した結果をDataSetに押し込めばいいだけだし。
クラサバアプリで使えないってのは、貴方の考えが着いていけないだけなのでは?

337 :NAME IS NULL:2006/03/17(金) 15:19:03 ID:???
>>336
禿同

テーブルなめるバッチ処理のプログラムでDataSetを使ったプログラム見たときは目眩がしたもんだ

338 :NAME IS NULL:2006/03/17(金) 17:20:26 ID:???
>>336
いや、件数で打ち切りたくないのです。例えば、グリッドに表示するとき、
初め、グリッドに最低限表示する分をフェッチして、スクロールバーでスクロールされて、
表示に新たな行が必要な時に、初めてフェッチされるイメージです。
元々、私Delphi人間なんですが、DelphiのあるDatasetはまさに、それをプログラムレスで
自動でやってくれるもので。
遂、比較してしまいます。
DataReaderって接続型なんですね。確かに、おっしゃる通りで、できそうですね。
すみません。


339 :NAME IS NULL:2006/03/17(金) 19:48:19 ID:???
質問宜しいですか?
あるASP.NETで作られたボタン付きのページまでのURLが有るとして、
まだ一度もサーバにアクセスしていない状態(ページをロードしていない)
からURLを打ち込み、以前のASPのように(.NETだとViewStateですか)
URLの後ろに引数を付けて、そのページのボタンを押した時と同じ動作を
させることは可能でしょうか?

セキュリティから見ると余り作法が良いとも言えませんが、サーバ側で接続時に
作るインスタンスが未生成の時の動きを、ページの初期ロードだけではなく、
そこにひと味付けると言う意味で、教えて頂きたいと思いました。

340 :NAME IS NULL:2006/03/17(金) 19:52:24 ID:???
339です。誤爆しましたごめんなさい。

341 :NAME IS NULL:2006/03/27(月) 02:14:34 ID:vkv27tSb
ADO.NetのアダプタのUpdateコマンドだけど、
これってテーブルの、変更された行毎にSQL投げてるわけじゃないですか。

と、するとね、
コミットって、HDD上にログを書き終えて初めて返ってくるわけでしょ?
つまり、オートコミット・モードだと、

 コミット→ [SQL処理→HDD上ログ書込→コミット]x n →SQL処理
となって、延々とHDDアクセスの待ち時間が掛かるわけだ?

そう考えると、コネクションにトランザクション設定しないととんでもない
パフォーマンス低下だよね?

342 :NAME IS NULL:2006/03/27(月) 02:29:26 ID:r0hE9Y7s
>>341
オートコミットだとログは書かなかったような気がしてきた。

だとしても、HDD上のテーブルの、一行更新し終わるまで
Updateを呼んだプロセスなりスレッドなりは待たされて、
数千以上のCPUのクロックを無駄にしてから、次の一行更新
に取りかかるわけだよね?





343 :NAME IS NULL:2006/03/27(月) 02:33:36 ID:???
ちなみに、トランザクション設定しても、
一行分ずつSQL送りよるね。

何でコミット送ったときにまとめて送らないんだろ…

344 :NAME IS NULL:2006/03/27(月) 10:01:56 ID:???
>>343
なんでまとめて送るって思えるんだろう?
やりながらNGになってロールバックっていう処理だってあるじゃん。
在庫を引き当てつつ処理してるけど、ある時点で在庫つきたからロールバックとか。

その処理をDataSet内のデータのみで一括でやるのはおかしいよ。

345 :NAME IS NULL:2006/03/27(月) 11:37:55 ID:???
>344
そうだね。
でも、アダプタのUpdateに関してはまとめて送るべきだと思う。


346 :NAME IS NULL:2006/03/27(月) 12:54:08 ID:???
>>345
2.0(2005)からそうじゃなかったっけ?

347 :NAME IS NULL:2006/04/03(月) 17:47:49 ID:???
あげ

348 :NAME IS NULL:2006/04/09(日) 13:39:53 ID:???
age

349 :白馬の玉子 ◆PqSzNbkqDo :2006/04/11(火) 18:39:00 ID:bho/Vj3W
ども。
あっしのようなやつでも、お力になれるなら、
いつでもどぜう。

350 :NAME IS NULL:2006/04/16(日) 16:59:56 ID:???
保守

351 :NAME IS NULL:2006/04/22(土) 04:02:21 ID:???
あげ

352 :NAME IS NULL:2006/04/24(月) 20:22:35 ID:???
MDBをOleDBで使用して
TableAdapterのUpdateCommandプロパティを使用してデータの更新をしようとしていますが、
OleDbではTeansactions.TransactionScopeは使用できないようですが
トランザクションを利用するにはどうすればよいでしょうか

353 :NAME IS NULL:2006/04/29(土) 08:45:56 ID:???
ODBC?

354 :NAME IS NULL:2006/04/29(土) 08:49:21 ID:???
JetもSQLSvrも、トランザクションのスコープには実質未対応(未実装)だったと思う。
あれって、DBMSの機能をオブジェクトでカプセル化してるだけで、
ADO.Netがなにかをやってくれるわけじゃないと思うんだけど。
違ったらすまん。



355 :NAME IS NULL:2006/04/29(土) 11:16:04 ID:???
>>354
>あれって、DBMSの機能をオブジェクトでカプセル化してるだけで、 
そのとおりで、直接DBのトランザクションを使う場合とCOM+の分散トランザクションを使う場合に
同じ書き方でスコープ単位の宣言トランザクションを使えるのが売り。
ただJETも一応トランザクション機能を持ってるからどうして使えないかはちと調べてみるか。

356 :NAME IS NULL:2006/05/01(月) 11:57:06 ID:NfBg2Jco
ASP.NET 2.0でも,DataTableの結合ってできませんよね?

あらかじめ結合した状態でDataTableを生成すればいいんだろうけど,
事情があって,異なるデータベースからDataTableを取得して,結合
できれば,とても便利なんだけど。

ググってみたけど,ヒットしなかったので,多分駄目だとは思うのですが。

357 :NAME IS NULL:2006/05/01(月) 16:30:53 ID:???
>356
リレーションシップを設定するのは簡単だから、結合する処理を実装すれば
良いだけでは?

358 :NAME IS NULL:2006/05/13(土) 09:40:55 ID:???
保守

359 :NAME IS NULL:2006/05/30(火) 16:11:40 ID:???
保守

360 :NAME IS NULL:2006/06/09(金) 11:12:06 ID:Kt0WadUm
>>356
もう超亀レスだけどw
Mergeとかどうよ?

361 :NAME IS NULL:2006/06/09(金) 15:10:14 ID:qq5u1iF/
ADO.NETで、単純にSELECTの結果の一覧を取得するだけ(つまり他のコントロールと連携などしない)場合
どの方法がもっとも速いですか?

362 :NAME IS NULL:2006/06/09(金) 15:40:08 ID:???
>>361
adOpenForwardOnly

363 :NAME IS NULL:2006/06/09(金) 15:41:41 ID:???
>>362
ごめん,.NETね。
SqlCommand.ExecuteReader

364 :NAME IS NULL:2006/06/23(金) 00:20:36 ID:???
hosyu

365 :NAME IS NULL:2006/06/23(金) 10:36:00 ID:???
ム板から誘導されました。

DataTableにExpressionプロパティ入りのDataColumnを追加して、
SqlDataAdapter.Updateしたら、
「Expression列のReadonlyを変更できませぬ」という
例外が出ました。
そうはいってもExpression列のReadOnlyはデザイナ上でだってfalseには
できません。
この列以外は全部ソーステーブルと1対1です。
どこをどうしたらいいんでしょうか。

いまはとりあえずUPDATEの後ろのSELECTをコメントアウトしてしのいでいます。


366 :NAME IS NULL:2006/06/23(金) 11:07:51 ID:???
>>365
追加したExpressionプロパティの処理内容と、具体的なエラーメッセ
ージ、および暫定対処のselect内容を、もっと正確に教えてたもれ。

367 :365:2006/06/26(月) 10:38:09 ID:???
>>366
【再現方法】
・VS2003 C#1.1
・新規Windowsプロジェクト
・SqlDataAdapter、ウィザードでクエリ作成、Northwind.Products
 列はProductIDとProductNameのみ、同時実行制御、データセットの更新オン
 接続ユーザーはsa
・データセットの生成、インスタンスをフォームに貼る。
・DataSetをデザイナで編集、Element列を追加、"ProductName2"
 string、Expression = "ProductName"、あとはいじってない。
 つまり商品名を2箇所に表示
・フォームにDataViewとDataGridを貼って普通にバインド
・Form_LoadでFill、button1_ClickでUpdateするだけ。

【例外】
sqlDataAdapter1.Update()
ReadOnlyException
Message = "Expression 列の ReadOnly プロパティを変更できません。"

【直したSQL】
自動作成された"UPDATE...;SELECT..."のSELECT以下を/**/で挟んだ
つまり「データセットの更新」オプションオフの状態。

【さらに】
新規作成の場合、上の方法でも同じ例外が発生することがわかりました。

Expressionの使い方がまずいのでしょうか?


368 :NAME IS NULL:2006/06/26(月) 11:22:10 ID:???
>>367
自動生成は冗長なんて面倒だよね。
Form_load時のFillコマンドで実際に生成されるSelect文は動いている
ようだから、Updateの末尾にあるSelect文のと差異を見つけられるか
もしれない。

もしくは前者のSelect文を、そのままUpdate文に連ねて書いてみると
か、NonQueryを使って自力で実行させるという手もある。

369 :NAME IS NULL:2006/06/26(月) 19:01:40 ID:???
>>367
VS2003が手元にないのでVS2002で試したところVS2002で同じ現象が確認できました。
VS2005ではエラーは起きませんでした。

370 :367:2006/06/27(火) 11:19:13 ID:???
>>369
うーむそうすると1.xのバグ(又は仕様)なんでしうか・・・

実際作ってるプログラムでは「サーバー側で既定値を設定させて
その値を返してもらう」とか、そういうことはしていないので、
INSERT/UPDATE後のSELECTは必要ないと思う
(同時実行制御はしてるから自分のところの値で更新されてるはず)
ので、とりあえずSELECTなしにしています。
とはいえ解決はさせたいので>>368をヒントにいじってみます。
ReadOnlyExceptionをスルーさせればSELECTありでも動いているように
見えるんですが、この場合更新件数は返ってきませんorz


371 :367:2006/06/27(火) 18:33:50 ID:???
同じ悩みを抱える人を見つけました。
ttp://blogs.labtech.epitech.net/blogs/jaylee/archive/2005/01/27/2156.aspx

これはなんか上手くいかなかったんですが、コメント欄には、
問題の列を一時的にコレクションから削除しておく方法が出ています。こちらは
うまくいきました。列のインデックスが変わってしまう点が弱点ですね。


372 :NAME IS NULL:2006/07/05(水) 11:37:20 ID:???
>>2の2.0verマダー?

373 :NAME IS NULL:2006/07/10(月) 15:04:36 ID:aBIIL5KH
ADO.NET2.0を利用しています。
DataSet内のテーブルに集計用のクエリを発行してその結果を受け取ることは可能でしょうか?
>>356と全く同じ状況で、異なるデータベースの異なるデータセットから親のデータセットに
Margeでテーブルだけ移動させてリレーション作成してrow.GetParentRow("リレーション名")で
データは取得できるようになったんですが、これを元にして集計を行いたいんです。
鯖に一時テーブル作成してそこに一旦データ書き込む方が現実的なんでしょうか?

374 :NAME IS NULL:2006/07/11(火) 09:20:13 ID:???
>>373
DataRowのExpressionを調べる。

375 :NAME IS NULL:2006/07/12(水) 22:09:41 ID:???
DataGridViewを使うようなプログラムで、みなさんはどういうやり方をしてますか?

データの取得に・・・
DataTable(DataSet)にFill
or
DataReader

DataGridViewに・・・
DataTableやDataSetをバインド
or
RowCount自分で増やして1行ずつ書き込み

DBに戻すのに・・・
DataAdapterでUpdate
or
Executeでこつこつと・・・


376 :NAME IS NULL:2006/07/13(木) 00:02:35 ID:???
読むのも書くのもSQLを自力で書いてExecuteしてる。
自動生成は正直使えないと思うよ。

377 :NAME IS NULL:2006/07/13(木) 09:51:20 ID:???
結合表に対して更新できないからね。
昔でいう、アクセスのウィザードで出来る程度の画面だったら自動のSQLでOKでしょ。


378 :NAME IS NULL:2006/07/14(金) 00:07:19 ID:TdnpPvu/
DataTableをAccessなんかでいうところの「ワークテーブル」みたいなものに見立てて、
DataTableとDBとのやりとりは、DataAdapter
DataTableと画面とのやりとりは、指定の場所に直接書き込みってな感じが多い。

基本的にはこれでいいんじゃないかと思っているが、
データ量が多い時の動作はバインドするほうが軽いような気がする。

379 :NAME IS NULL:2006/07/18(火) 00:17:56 ID:q2vjaqgB
非常に素人な質問で申し訳ないのですが
ODBC接続が可能なDBとういのはADO,ADO.NETで
接続可能と考えていいものなのでしょうか?
ご教授ください。

380 :NAME IS NULL:2006/07/18(火) 01:08:31 ID:???
つ「ttp://support.microsoft.com/default.aspx?scid=kb;ja;310985」

381 :379:2006/07/18(火) 22:07:39 ID:???
>>380
ありがとうございます。


382 :NAME IS NULL:2006/07/20(木) 15:04:49 ID:???
ループ処理で新規レコード追加しまくりな時に、SELECT * FROM tableのSQLで
DataAdapter.Fill(DataSet)してからNewRow()で追加しているんだが、
追加側のレコード参照しないのにFillで全件取得するのは時間の無駄だよな?
TOP1とかSQLに加えて取得数制限した方がいいんだろうか

383 :NAME IS NULL:2006/07/20(木) 16:27:47 ID:???
>>382
事前に定義済みのDataSetなら読み込む必要はないし、そうでないなら where 1 = 0 でもつけて読み込めばいい。
絞込みの条件無しで全件読み込むのはレコード数が少ないことが保障されていない限り使うことはない
・・・はずなんだけど、たまに見かけるorz

384 :NAME IS NULL:2006/07/20(木) 16:32:41 ID:???
事前に定義済みのDataSetってのがよく分からないのでwhere 1 = 0 を使わせて貰うぜ!!!!!!!!!!

385 :NAME IS NULL:2006/07/20(木) 17:16:09 ID:???
SQLインジェクションを連想してしまった。

386 :NAME IS NULL:2006/07/24(月) 01:38:16 ID:???
あややが「イン・ジェク・ション!イン・ジェク・ション!」って
連呼してたCMは、最初どきっとしたもんだ。


387 :NAME IS NULL:2006/07/26(水) 00:05:30 ID:???
MSのSqlServer2000にVB.NETのSqlClientで接続しています。
SqlCommandのExecuteReaderメソッドでSELECT文を投げて
DataReaderオブジェクト取得した場合結果セットはどこにあるものなのでしょうか?

よくわかってないのですがクライアントアプリケーション側に
全結果が来てるわけではないのですよね?

変な質問で申し訳ないですが教えてください、お願いします。





388 :NAME IS NULL:2006/07/26(水) 02:04:50 ID:???
>>387
結果セットはどこにも存在しない。
クライアントはサーバーから送られてくるデータを順次処理するだけ。
DataReaderは前方スクロール専用でRead Only。

389 :NAME IS NULL:2006/07/26(水) 08:41:16 ID:???
>>387
@IT:基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング― 第2回 .NETデータ・プロバイダによるデータベースのアクセス
http://www.atmarkit.co.jp/fdotnet/basics/adonet02/adonet02_02.html

390 :387:2006/07/26(水) 22:06:52 ID:???
>>388-389
ありがとうございます

実は>>389さんが紹介してくれたサイトを見てもわからなくて質問しました。
どこにも存在しないというのはデータベースにもないのでしょうか?

でもどこかに結果があれば前方向だけというのはおかしいですね・・・
DataReaderオブジェクトのReadメソッドは奥で何をしているのでしょうか?


391 :NAME IS NULL:2006/07/26(水) 22:35:46 ID:???
そんなこと気にするより先に覚えることあるんじゃないかな……

392 :390:2006/07/27(木) 01:44:41 ID:???
msdnに
ADO.NET の DataReader を使用して、データベースから前方への読み取り専用のストリームを取得できます。
結果はクエリを実行すると返され、DataReader の Read メソッドを使用して要求するまで、クライアントのネットワーク バッファに格納されます。
と書いてありました。
わかったようなわからないような、ですが。

前方のみなのはそもそもサーバカーソルを使うわけではないということなんだと勝手に納得しました。
お騒がせしました。


393 :NAME IS NULL:2006/08/16(水) 20:49:09 ID:???
age

394 :NAME IS NULL:2006/08/16(水) 23:45:49 ID:???
そもそもカーソルと言ったら普通はサーバー側のカーソルを指す。
で、フェッチしたデータをクライアント側でキャッシュして、前後方向に移動できるような機能がADOに追加され、
それがクライアントカーソルと言われるようになったので、従来のサーバー側のカーソルを
サーバーカソールと言うようになった。だから、データベース側から見れば、
クライアントカーソルの存在なんてしったこっちゃない。
クライアントカーソルはあくまで、クワイアント側が勝手に提供している機能。
それをごっちゃにしてるから、こんがらがるんだよ。
で、サーバー側のカーソルは今までは後方移動しかできなかった。最近のデータベースは
前方移動できるカーソルもサポートしているのもあるらしいが、
詳細は各データベースにゆだねる。

395 :NAME IS NULL:2006/09/11(月) 01:18:13 ID:???
スピードもうん十倍差があるし、
なんかあった時の不具合の習性でわけのわからない自動生成SQLの
変な癖で"Microsoftむかつく"と思いながらいちいちSQL文変えるの考えると
考えるとDataReaderとベタ書きSQLでやるほうが結局いいかもね。

396 :NAME IS NULL:2006/09/12(火) 17:11:46 ID:???
これはADOというかデータベースの問題かもしれませんが・・・

nullと空文字列は違うといいますが、たとえばデータを保存する際に
その項目が空だったら、varcharのフィールドには空文字列orDBNullのどちらを入れますか?

何も入っていない=nullというルールで統一したいところなのですが、
nullをいれるのってコードを書く際に結構面倒ですよね・・。

Accessなんかでは空文字列はプロパティで許可しないと入れられないので
昔から空文字列を保存するのはよくないというイメージがありまして・・・。
しかし、最近になって空文字列で統一されていれば
データをいちいちnullチェックしなくてすむのは楽だなと思ったりしました。

すべての文字列の項目を空文字列で統一するとなにかデメリットがあるんでしょうかね?

397 :NAME IS NULL:2006/09/12(火) 19:04:58 ID:pkmJ9WSM
VB.NET + ADO.NET + SQLServer2005Express です。

アプリケーションのバージョンアップに伴いサーバ側のテーブルや
ストアドプロシージャも変更できるようにしたいと思っています。

それで、データベース側に
ServerDataTable
Setting    Value
----------------
Version    1.00
みたいなテーブルを追加して、この値をアプリケーションから参照
した上で、必要な差分のぶんだけデータ定義コマンドを投げようと
思っているのですが、これで問題ないでしょうか?

398 :NAME IS NULL:2006/09/13(水) 15:01:07 ID:???
ADO.NETと関係ないね…それはシステム設計や運用の問題だろう…
その手の問題だとDBのリソースがどの程度つかえるか、
アプリケーションをどのように管理する予定なのかという
状況もわからないとその質問に明確に答えてくれる人はいないとおもうよ。

399 :NAME IS NULL:2006/09/13(水) 15:21:54 ID:???
>>398
ちょっとそこら辺、諸事情であまり書けないもので。すみません。
ありがとうございました。

400 :NAME IS NULL:2006/09/16(土) 00:06:17 ID:???
>nullをいれるのってコードを書く際に結構面倒ですよね・・。
普通、コードで何もいじくらなければ、デフォルトで既にnull入ってねぇか。。



401 :NAME IS NULL:2006/09/19(火) 11:04:32 ID:gIiqmeGm
ADO.NETから、パスワード設定をしていないmdbへの接続サンプルは
ヘルプにもネットにも沢山ありますが、パスワード設定をしている
mdbファイルへの接続方法がのっていませんよね。
mdbファイルのパスワードがpaの場合、接続文字列の最後に「password=pa」と
か追加してみても駄目でした。
パスワード設定をしているmdbへ接続するにはどうしたらよいのでしょうか。
どうぞよろしくお願い致します。

402 :NAME IS NULL:2006/09/21(木) 06:38:32 ID:???
ちゃんと仕様を調べたか?

わからないなりにも、少しはググレよ
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&safe=off&ie=UTF-8&oe=SJIS&q=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%20%6D%64%62%20%6F%6C%65%64%62%20%E6%8E%A5%E7%B6%9A%E6%96%87%E5%AD%97%E5%88%97

ここいらもちゃんと嫁
http://msdn2.microsoft.com/ja-JP/library/ms254978.aspx
http://msdn2.microsoft.com/ja-JP/library/system.data.oledb.oledbconnectionstringbuilder.aspx

生きてる内に頭は使え


403 :NAME IS NULL:2006/09/21(木) 07:07:26 ID:???
>>402
ありがとうございました。
「mdb "ado.net" 接続」などでやっていたところ、一番単純な接続サンプルしか出てこなくて
無いのかなと本気で思ってしまっていました。
ご迷惑おかけしました。

404 :NAME IS NULL:2006/10/01(日) 12:34:15 ID:+1GZROl8
datareaderってサーバカーソルを使ってないの?

405 :NAME IS NULL:2006/10/01(日) 13:42:15 ID:???
.netの先のDataドライバと、DBMSの仕様によるんじゃないの?
ADO.net2.0としてはそれは認知してないと思う。


406 :NAME IS NULL:2006/10/01(日) 19:09:13 ID:???
OracleやSQLServerだとサーバーカーソルを使っていると言う事で良いのかな?

407 :NAME IS NULL:2006/10/01(日) 20:59:56 ID:???
MSSQLServerはサーバーカーソルは使ってない。
使ってないから1つのセッションで開けるDataReaderは1つだけ(MARSを除く)の制限がある。
サーバーカーソルを使うとfetchするたびに通信の往復が発生するが、
DataReaderはクエリーした結果を一度に受け取っているイメージで、全部読み終わるまでのスピードが速い。
もちろんパケット単位で分割はされているだろうしそれ単位でのフロー制御はある。

408 :NAME IS NULL:2006/10/08(日) 00:14:01 ID:???
>>394を読めバカども


409 :NAME IS NULL:2006/10/09(月) 16:34:17 ID:???
>>406
firehoseカーソルをカーソルと見なすかどうかによるねぇ。
非カーソルと分類するなら>>407の見解になると思う。

ADOではadOpenForwardOnly/adUseServerでこのfirehoseカーソルになるのだが、
ado.netと違いなぜかこのタイプのカーソルを開いたままで他のカーソルが使える。
この辺のからくりが次のurlで説明されている。
ttp://www.microsoft.com/japan/msdn/sqlserver/sql2005/marsinsql05.aspx#marsins_topic4

これによるとADOがこっそりセッションをもうひとつ増やしているとのこと。
ただトランザクションを使った場合はセッションを増やすわけには行かないのでado.netと同じくエラーになる。
ado.netでネストさせたければ明示的にもうひとつセッションをオープンしろということでしょうな。

410 :NAME IS NULL:2006/10/09(月) 16:38:54 ID:???
>>394
スクロールカーソルはSQL92でも規定されているし、SQLServer、Informix、DB2はかなり初期から実装している。
反面Oracle、Postgres、myはたしかサポートしていない。
>サーバー側のカーソルは今までは後方移動しかできなかった。
というのは間違い。ただ処理系によって違うというのは事実だね。
このためoracleのodbcやoledbで任意の位置にスクロールさせるためにはクライアントカーソルにする必要がある。

ADO.NET(system.data.sqlclient)ではサーバーカーソルを全否定してるんだよね。
読み取りはfirehoseのみ、更新はupdate/insert/deleteを直接使えよと。
一方でMicrosoft.SqlServer.Server名前空間ではしっかりサーバーカーソルが使える。
つまりサーバーカーソルはストアドなどサーバーサイドで使えという考え方らしい。

411 :NAME IS NULL:2006/10/27(金) 01:10:44 ID:0en0NyWg
あげときますね。。

412 :NAME IS NULL:2006/10/27(金) 20:43:07 ID:???
伺います.

Accessのファイルから縦n 横mの要素でクロス集計を行わないといけないのですが,
どういう手法がありますか?
エクセルを埋め込むのは駄目らしいです...

413 :NAME IS NULL:2006/10/28(土) 18:02:22 ID:???
>>412
もう少し詳しくかけよ。何がしたいの?

414 :NAME IS NULL:2006/10/30(月) 11:21:11 ID:???
>412
ふつうのクロス集計だとダメなのか

415 :412:2006/10/31(火) 10:02:26 ID:???
すみません,別件のデスマーチに巻き込まれておりました...

VB.NET(C#でもいいんだろうけど)で
Accessファイルから取得したデータを使用してクロス集計を行うのですが.
n行×1列じゃなくてn行m列のピボットテーブルを作成するには
どういう手法を使えば簡単か伺いたいのです.

ADOでデータ取り込みまではできたのですが,
じっさいどうやればクロス集計に持っていけるのかがわからないでいます

>普通のクロス集計
でいいのだとは思うのですが,サンプルコードが載っているページとかないでしょうか?

最終的にはデータグリッドビューを使用することになると思うのですが,それで間違っていないかの確認もいただけたらと思います.

416 :414:2006/10/31(火) 17:25:31 ID:???
>415
データ読み込んでからクロス集計するロジック書けないなら、データを読み込む前にクロス集計
してから読み込め

参考SQL
TRANSFORM 〜
SELECT 〜
FROM 〜
GROUP BY 〜
ORDER BY 〜
PIVOT 〜;

こんなのあまりに初歩過ぎてサンプルコード無いのでは???

417 :412:2006/11/01(水) 15:53:14 ID:???
>>416
ありがとうございます.
Accessのファイルからの読み込みでは
n行1列しか扱えないと聞いていたのですが.
そうではないのですね.

そろそろ組み始めていきます.
ありがとうございました.

418 :NAME IS NULL:2006/11/03(金) 12:17:54 ID:???
>>412
デスマーチ・・・
SQLもわかんねーやつがデスマーチ・・・
しかもMDB・・・

419 :NAME IS NULL:2006/11/03(金) 15:25:35 ID:???
だからデスマなんでしょ

420 :NAME IS NULL:2006/11/07(火) 10:21:23 ID:???
DataView クラスの AddNew() メソッドで DataRowView を追加しても
BindingManagerBase(CurrencyManager) の Position プロパティにも
Count プロパティにも行数が反映されないんだが、これは .NET のバグなのかなぁ?

新規の行は作成されてるみたいなんだけど、どうやっても
移動できなひ・・・ちゃんとできてる人いる?

できなきゃおとなしく DataTable 使うか・・





421 :420:2006/11/09(木) 10:43:43 ID:???
自己解決しました

DataView から CurrencyManager を取得した場合でも
DataView の大元の DataTable に反映させないと Count プロパティは
変わらないのですね。

っつーことで EndEdit() で解決
TextBox あたりに DataView バインドした場合は CancelEdit メソッドは
使えないということですな、、、自前で Delete するか。

いやいやスレ汚しスマソ

422 :NAME IS NULL:2006/11/09(木) 11:29:33 ID:???
スレ汚しついでに書いとくと、あくまで DataView に AddNew() した
場合で、普通はせっかく CurrencyManager 取得するんだったら
こっち側の AddNew() & CancelCurrentEdit() 使うわなつーことで。

423 :NAME IS NULL:2006/11/18(土) 12:24:47 ID:???
ADO.NETはサーバーカーソルが無いのでUPDATE時の排他チェックで困ります〜 orz


424 :NAME IS NULL:2006/11/26(日) 22:50:18 ID:???
ADO関連によい参考書籍はどれがお勧めですか?

プログラミングMicrosoft ADO.NETがamazonで評価高いですが高くて。


425 :NAME IS NULL:2006/11/27(月) 10:50:43 ID:???
@ITの連載と、MSDNだけで十分。

426 :NAME IS NULL:2006/11/30(木) 11:14:06 ID:???
データーベースはAccessです。

ID  日付      商品コード  価格
1  11/29    100      900
2  11/30    100      1000
3  11/30    100      1010
4  11/30    200      2000
5  12/1     200      3000

のようなデータから商品コード毎の最新日付の価格(安い方)を取り出したいです。
上記データだと
商品コード   日付    価格
100       11/30  1000
200       12/1   3000
となります。

どのような処理をすればよろしいのでしょうか?

427 :NAME IS NULL:2006/11/30(木) 15:21:51 ID:???
>>426
SQLのスレで聞いた方がいいんでね?

428 :NAME IS NULL:2006/12/20(水) 00:07:30 ID:???
初心者には敷居が高い_| ̄|○

↓こーいうクラス作ってて
#Region "//**メンバ変数**//"

Private PrimaryKey As String
Private FirstKey As String
Private SearchTable As String

#End Region

#Region "//**コンストラクタ**//"

Public Sub New(ByVal parKey1 As String, ByVal parkey2 As String, ByVal parTable As String)

PrimaryKey = parKey1
FirstKey = parkey2
SearchTable = parTable

End Sub

#End Region

#Region "//**レコードの追加**//"

Public Function InsertRecord(ByRef dr As DataRow) As Boolean

Dim Cn As New OleDbConnection(My.Settings.DBConnectionString)
Dim SQLcmd As OleDbCommand = Cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLcmd)
Dim Builder As New OleDbCommandBuilder(Adapter)
Dim Table As New DataTable

Try
'//**Tableにデータを読み込む**//
SQLcmd.CommandText = "SELECT * FROM " & SearchTable & ""
Adapter.Fill(Table)
'//**新規レコードを追加**//
dr = Table.NewRow()
Table.Rows.Add(dr)
'//**Tableの内容でMDBを更新**//
Builder.DataAdapter = Adapter
Adapter.Update(Table)
Form1.DataGridView1.DataSource = Table
Return True
Catch ex As Exception
Return False
Finally
Builder.Dispose()
Table.Dispose()
Adapter.Dispose()
SQLcmd.Dispose()
Cn.Dispose()
End Try

End Function

#End Region

↓こーいう動作させたいけどAddRowへの代入でエラーがでます・・・なぜ?

429 :NAME IS NULL:2006/12/20(水) 00:08:05 ID:???
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim PrimaryKey As String = 部門コードTextBox.Text
Dim FirstKey As String = 部門名TextBox.Text
Dim SearchTable As String = "tSection"
Dim AddRow As DataRow

Using clsSection As New DBIO(PrimaryKey, FirstKey, SearchTable)
'主キーの重複チェック
If clsSection.PrimaryKeyCheck = True Then
Exit Sub
End If
'第一項目の重複チェック
If clsSection.FirstKeyCheck = True Then
Exit Sub
End If
'レコードの追加
AddRow(0) = 部門コードTextBox.Text ←ここ!!
AddRow(1) = 部門名TextBox.Text
AddRow(2) = 郵便番号TextBox.Text
AddRow(3) = 住所TextBox.Text
AddRow(4) = 電話番号TextBox.Text
AddRow(5) = ファックス番号TextBox.Text
clsSection.InsertRecord(AddRow)
End Using

End Sub


430 :NAME IS NULL:2006/12/20(水) 13:47:52 ID:???
Dim AddRow(5) As DataRowになってないからじゃね?

431 :430:2006/12/20(水) 13:53:04 ID:???
ああごめん。流し読みしてて間違えた。
AddRowの引数はフィールド指定だったね。

事前にNewRowで空行を生成してないからじゃないかな?

432 :NAME IS NULL:2006/12/20(水) 20:28:07 ID:h1j7g+Lk
>>431さん

ずばりその通りでしたorz

もいっこ質問なんですが、みんなデータベースアプリ作るとき(小規模な)1テーブル1クラス?
それともReaderクラスとか処理系ごと?

教えてたもれ!(*゚∀゚)=3

433 :NAME IS NULL:2006/12/22(金) 18:58:22 ID:???
joinする場合とかあるからReaderClassだな。

434 :NAME IS NULL:2006/12/27(水) 11:28:45 ID:???
DataGridViewで一番下の*の付いた行を削除しようとされると
InvalidOperationException で落ちます。
どうすれば阻止できますか?

435 :NAME IS NULL:2006/12/27(水) 11:50:47 ID:???
まにあるにヤメレと書いておく

436 :NAME IS NULL:2006/12/27(水) 13:25:44 ID:???
グリッドから新規行の追加なんてさせるなってことさ。
せいぜい編集くらいに止めておくべきだよ。

437 :NAME IS NULL:2006/12/27(水) 13:33:15 ID:???
AllowUserToDeleteRowsをfalseにして自分で処理すれ

438 :NAME IS NULL:2006/12/27(水) 13:34:31 ID:???
indexがテーブルの行数を越えていたら無視

439 :NAME IS NULL:2006/12/27(水) 13:43:30 ID:???
>>438
Delキー押されたら?

440 :NAME IS NULL:2006/12/27(水) 14:12:42 ID:???
そうなんだよなぁ。
グリッドに表示されているCurrentRowIndexと、テーブルのRows.Count
にはズレが発生するから、そのまま使ってると後々面倒なことになるし。

うちはCurrencyManager経由でごまかしてるけど、このへんの実装って
おかしくね?

441 :NAME IS NULL:2006/12/27(水) 14:43:21 ID:???
おかしくない、新規入力中の行はGrid上は有り、バインド元無しってのは正しい。

442 :NAME IS NULL:2006/12/27(水) 15:13:05 ID:???
ああごめん、入力中のじゃなくて>>439絡みの削除について書いてた。
Rows.CountはRowStateの状態に関わらず全数取得するのはわかるんだ
けど、例えばDeletedを除外した結果だけを返すとか、もうちょっとオプ
ションが欲しいなと思ってさ。

うちはまだ1.1ベースだけど、2.0以降になったらまた変わってるのかな?

443 :NAME IS NULL:2006/12/27(水) 16:18:20 ID:???
>>439
>>437

444 :NAME IS NULL:2006/12/27(水) 16:19:29 ID:???
そもそも行扱いなのがいけない

445 :NAME IS NULL:2006/12/27(水) 22:20:51 ID:???
新しい行でデリート押したら死亡したw


446 :NAME IS NULL:2006/12/28(木) 00:08:50 ID:???
まあ、DataGridは一覧表示&一部編集&複数行の一括削除くらいでやめ
ておくべきだね。行追加は項目数や内容によっては横長になりがちだし、
入力チェックも面倒そうだ。

447 :NAME IS NULL:2006/12/28(木) 21:37:50 ID:???
行の作成か削除のどちらか無効にしないと確実に落ちるから
明らかにバグだろ

448 :NAME IS NULL:2006/12/28(木) 21:48:30 ID:???
catch(InvalidOperationException e)
{
if(dataGridView.CurrentRow.Index > dataTable.Rows..Count)
MessagaBox.Show("消すな( ゜Д゜)ゴルァ!");

}

449 :NAME IS NULL:2006/12/30(土) 01:20:54 ID:???
2005でも解決してないの?

450 :NAME IS NULL:2006/12/30(土) 17:35:57 ID:TSMLJlTl
ADO接続で、dBASE IVのプロバイダ設定していますが、
create table test.dbf ( col numeric(20,10) )とやっても、
DBFファイルを見ると、整数部20の小数部5桁になってしまいます。
小数部が必ず5桁で定義されてしまいます。

これはどうすれば任意の小数部桁数が指定できますでしょうか?

言語はVC++ MFCです。

451 :NAME IS NULL:2007/01/10(水) 00:46:54 ID:???
普通は空の行消そうとなんか思わないだろ

452 :NAME IS NULL:2007/01/11(木) 22:22:04 ID:???
それをするのが一般ユーザーの恐いところなんだな。

453 :NAME IS NULL:2007/02/02(金) 22:27:25 ID:fdCBEJdL
2002で戸惑っていて、やっと慣れたとおもっていたら、2005でまた大幅に
仕様が変わっているとか書いてある。。。こんなペースのバージョンアップで
開発なんか出来るのかなぁ。。

454 :NAME IS NULL:2007/02/05(月) 17:11:05 ID:???
DAO
 ↓
RDO
 ↓
ADO
 ↓
ADO.NET 1.1
 ↓
ADO.NET 2.0

毎回、大幅に変わってますが何か?

455 :NAME IS NULL:2007/02/08(木) 20:31:14 ID:IHk50Zf7
ま、ローカルに2次元の変数を宣言していて、そこに代入して言っているという
イメージに変わるってことなんだろうけど、更新とかのノウハウがいまいち分からない。。
同時アクセスしてきた時の処理とか

456 :NAME IS NULL:2007/02/12(月) 20:35:04 ID:PC2a0r5+
谷尻さんの書籍、2005になって内容が大分分かりやすくなった。
各クラスの説明や、操作の方法をサンプルを交えて解説してある。
以前のバージョンのは、分かりにくかった。
解説がプロパティをいじるだけで終わりとかだったからなぁ。

ただ、2005のものは、同時アクセスの制御について記述されていなかった事が
残念だと思った。

457 :NAME IS NULL:2007/02/14(水) 22:18:52 ID:A1GGRfpp
情報量が多くなって来て、要点を抑えた簡潔なものが手に入るようになってきたんだと思う。
以前は、「大量の文章」もしくは「ウィザードでグリッドに表示させて便利でしょ?」というものだった。

458 :NAME IS NULL:2007/02/14(水) 22:35:03 ID:???
前バージョンの谷尻さん本は、正直キツかった。
ウィザードがんがんパラメータごりごりで、CommandBuilderが生成した
冗長SQLみたいだと思わなかった?

459 :NAME IS NULL:2007/02/14(水) 23:46:40 ID:???
>>458
買って愕然としたよ。定番の書籍だからあれで勉強しようと本気で思っていたのに。
基礎編と応用編両方ともがウィザードばっかりなんだもん。

今回の書籍を読んで、当時は書いた本人もあまり理解していなかったのでは?
と思った。この人について詳しい事は知らないけれど、こういった、新しい技術系の
書籍の著者は技術に長けているのではなくて、翻訳が出来るだけだと聞いた事がある。

460 :NAME IS NULL:2007/02/15(木) 00:02:16 ID:???
>>459
だよなぁ。

オレがVB6で教えてもらってたとき、コネクションから更新まで全部
コードで書くやり方だったんで、ウィザードまかせの解説本はどうに
も合わなかったよ。2005版で良くなってるのなら、ちょっと立ち読み
してこようかな。

461 :NAME IS NULL:2007/02/15(木) 12:35:06 ID:???
DataAdapterをO-Rマッピングツール、それを前提として設計してるならウィザードのみでいけるんじゃないの?
そうじゃない設計のテーブルだと、結合とか入って更新不可な場面ばっかりになるから。

462 :NAME IS NULL:2007/02/15(木) 12:56:44 ID:???
>>461
意味分かって書いてる?

463 :NAME IS NULL:2007/02/15(木) 13:24:25 ID:???
結合して更新不可とか書いてる時点であかんだろ。
ごった煮テーブルだろうが何だろうが、SQLで直に更新するのが結果的に
いちばん楽だよ。O/Rマッピングは単に手間を減らすだけで、チューニン
グやデバッグにはSQL不可欠だし。

何でもかんでもオブジェクト指向ってのは、正直良くない潮流だよなぁ。

464 :NAME IS NULL:2007/02/15(木) 18:13:30 ID:???
ORマッピングはいらない
http://pc10.2ch.net/test/read.cgi/tech/1150944930/

465 :NAME IS NULL:2007/02/15(木) 18:15:09 ID:???
SQL文をハードコーディングするやつはとっとと氏ね
http://pc10.2ch.net/test/read.cgi/prog/1170779576/

466 :NAME IS NULL:2007/02/15(木) 18:59:47 ID:???
自称ADO.NETの申し子なんだが
おまいらの言ってる事がひとっつも理解できないぜ!

467 :NAME IS NULL:2007/02/15(木) 19:02:46 ID:???
まだ子どもだからだろう

468 :NAME IS NULL:2007/02/15(木) 19:06:26 ID:???
ADO.NETの萌えっ子だったらよかったのにな。

469 :NAME IS NULL:2007/02/15(木) 21:41:04 ID:???
>>460
俺の場合もコネクションから更新までをコードで書くやり方で習ったせいか、
データセットやアダプタ、コネクションをデザイナに貼り付けてコードを書くやり方は
いまいちしっくりとこない。
フォームで動くオブジェクトならわかるが、そういうもの以外をはりつけていくと、
コードが分散していくし、オブジェクトが多くなると不必要に画面を占領していって
分かりにくくなると思う。

デザイナはコードを目で追わなくても、一目で、データセットやアダプタの状況が分かる
ということのようだが、あのやり方に慣れたとしても、他のオブジェクト指向プログラミングには
生かしたり出来ないと思う。

470 :NAME IS NULL:2007/02/16(金) 16:47:32 ID:???
抽出にしろ更新にしろ、ロジックだから
プログラム内に書かれているほうが
後から追いやすいし、メンテしやすい。

471 :NAME IS NULL:2007/02/16(金) 21:28:13 ID:???
「DataSetやAdapterをウィザードを使ってデザイナに貼り付ける機能」は、
「プログラミングを触ったばかりの人向けに、ループをウィンザード形式で実現する機能を提供する」
というものと似ているものなのかなと感じた。

472 :NAME IS NULL:2007/02/17(土) 13:47:11 ID:???
>>462
だからO-Rマッピング"前提の設計"って書いてるでしょ?
ADO関係なく、O-Rマッピングが使えてるプロジェクトってのはそうやってやってるの。
>>463 さんのようなSQL直ってのは排除する前提ってのがまずありき。


473 :NAME IS NULL:2007/02/17(土) 14:26:53 ID:???
>>473
どこに O があんだよ?

474 :NAME IS NULL:2007/02/17(土) 15:28:09 ID:???
×「O-Rマッピングが使えてるプロジェクト」
○「O-Rマッピングを使うためのプロジェクト」

確かに設計段階から使うことを想定していれば、ORMに最適化されている
んで使い出は良くなるだろうね。一から起こせる新規の案件で、チーム全
体にORMが浸透している必要があるけど。

ORMだろうがSQL埋め込みだろうが、要は作る側の都合なんだよ。
使う側にとっては、要件を満たした動作をする限りどっちでもいいだろ。
優劣を競うことに意味は無いし、優れた成果物を作る方に専念しようよ。

475 :NAME IS NULL:2007/02/17(土) 18:06:29 ID:???
誰か DataAdapter とウィザードを使って O-Rマッピングする方法を教えてくれ。
O ってのは、もちろんデータセットではなくて、自分で作ったクラスな。

476 :NAME IS NULL:2007/02/18(日) 00:52:35 ID:???
>>475
残念〜ADO.NETはR-Oマッピングなんだよ。

477 :NAME IS NULL:2007/02/18(日) 10:29:00 ID:???
DataSetやDataTableなんかは、データベースに接続しなくても作る事が出来るわけだから、
2次元配列とかで複雑な処理をするコードを書く際に使えるなとも思った。
配列にソートやフィルタ機能がついてるクラスって見る事も出来るわけなのだから。

478 :NAME IS NULL:2007/02/18(日) 21:08:33 ID:???
DataSetクラス
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfSystemDataDataSetClassTopic.asp
データセットの概要
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbcon/html/vbcondatasets.asp

MSDNだけで理解って難しいよね。一方で谷尻さんの2005の方の書籍はすごく概要が分かりやすかった。
公式解説書の方もやたらと分厚くて要点が分からないし。
新言語が出て、概要をつかむ時って、みんなこういう分厚くて分かりにくい文章を解読して
理解していってるのかなぁ。。。って思う。

479 :NAME IS NULL:2007/02/19(月) 14:05:07 ID:???
テーブルに主キーを追加する方法がわかりません。

Dim column(1) As DataColum

column(0)=ds.Tables("table").Columns("ID")
ds.Tables("table").PrimaryKey = column

とすると列'ID'にはNULL値が含まれています。とエラーがでます。
ただ、このID列にはすべて数値が入っていてNULLではないことは確認しています。
他に設定が必要な項目があったら教えて下さい。

480 :NAME IS NULL:2007/02/19(月) 14:23:13 ID:???
>>479
コードは間違いないと思う。
配列宣言はcolumn(0)じゃないのかなぁ。

481 :NAME IS NULL:2007/02/19(月) 14:41:48 ID:???
試しにcolumn(0)にしてみましたがエラーは同じでした。
これはMSDNにのっていたサンプルでは
実際に使用している配列数+1の表記だったので何も考えずにそのまま使いました。

MSDNのサンプルだと新規にカラムを追加して、それを主キーとして設定するもの
なのですが、私の場合既存のカラムを主キーにしたいのです。

482 :NAME IS NULL:2007/02/19(月) 15:27:49 ID:???
新規にテーブルを作って試したところ、
無事に主キーを設定することができました。
原因特定できずに気持ち悪いままですが一応解決です。

483 :NAME IS NULL:2007/02/19(月) 15:46:36 ID:???
主キーを設定する前にDataSetに行追加してました。
その後でUpdateを呼び出して同期したと思っていたら、これは
DataSet --> Database の一方通行の書き込みだったのですね。
ID列の値はDB書き込み時に設定されるので、
これだとDataSet内にあるID列は確かにNULLですね。
エラーがでるはずです。

484 :NAME IS NULL:2007/02/21(水) 08:00:33 ID:???
私は今までの技術の流れの方を知らないんだけれど、このペースで行くと、
今のDataSetやDataAdapterはいつごろ使えなくなる技術になるのでしょうか。

485 :NAME IS NULL:2007/02/21(水) 09:54:29 ID:???
しらねー。
.net フレームワークが続けば、基本的には変わらないと思うよ。


486 :NAME IS NULL:2007/02/21(水) 10:08:55 ID:???
>>484
早ければ C# 3.0 の時代から。「使えなくなる」わけじゃなくて、「使う意味がなくなる」
ってことだけど。

487 :NAME IS NULL:2007/02/21(水) 12:44:11 ID:???
>>486
VB.net 3.0や、VC.net3.0じゃ駄目ですか?w


488 :NAME IS NULL:2007/02/21(水) 12:58:21 ID:???
プロプライエタリな技術やノウハウは、確かに怖い罠。

489 :NAME IS NULL:2007/02/21(水) 13:04:21 ID:???
>>487
VB は次のバージョンが 9.0、VC は cl のバージョンでいえば 15 かな?ww

490 :NAME IS NULL:2007/02/22(木) 07:20:05 ID:???
概ね、>>454の流れで来てたと思うのですが、こういう技術は何年持っていたとか
あると思うのですが、そういうのはまちまちなんですか?
もって3年間くらいだろうとか。

491 :NAME IS NULL:2007/02/22(木) 09:36:37 ID:???
で、それを考えてどうすると?
別にDAOの時代からそれほど大きく変わってないわけだし。
DataSetの概念は少しギャップあったけど、その程度付いてけないのは?だし。

入れたアプリの耐用年数を考えるなら、環境固定するか、メンテ契約結ぶしかないだろ?
そうじゃなしに未来永劫新OS対応なんて、普通のアプリでもやってない。


492 :NAME IS NULL:2007/02/22(木) 18:22:12 ID:???
ちょっと不安感があったんですよね。
今はそういう流れについていけるけれど、将来はついていけなくなるのかなぁと。
Cobolで学んだ事(ループやら関数の設計やら)は、今でも生きているんだけれど、
Cobolプログラマはどうして時代についていけずに解雇される事になってしまったんだろうか。。。
と思う。

493 :NAME IS NULL:2007/02/22(木) 21:01:30 ID:???
Cobolの動く環境が消えていくのに、他の言語表現を学ばなかったからじゃね?

494 :NAME IS NULL:2007/02/22(木) 22:47:10 ID:???
コーディングの違和感から、拒否してただけと捉えてていいのかなぁ。。

495 :NAME IS NULL:2007/02/22(木) 23:47:39 ID:???
×拒否してただけ
○逃げていただけ

496 :NAME IS NULL:2007/02/23(金) 00:06:24 ID:???
なるほどね。確かに根本にある理論を捉えていれば、関数の書き方など各種構文が変わったとしても
それについて行く事は出来たはずなんだろうね。
でも、そういうところの覚え直しの面倒臭さがあり、やらなかった。それだけなのかな。

ちょうど、今の状況がそれに似ているのかもしれない。
OSがバージョンアップして、開発環境も2005になって、Offceまでインターフェースが変わった。
動作確認やら、メニュを覚えるのがめんどい、軽い環境の方がいいなどといいつづけて、
自分の使う環境をいつまでも古いままでやっていたら、XP限定の技術しかもっていない状態になる。
サポートがあるといっても、XPのみで構築するという環境は相当な無理と大幅な限定条件がのしかかって
来る事になる。これから販売されるパソコンのほとんどはVistaなのだから。

497 :NAME IS NULL:2007/02/23(金) 00:12:45 ID:???
新しいことを学ばない技術者なんて、(゚听)イラネ

498 :NAME IS NULL:2007/02/25(日) 21:56:35 ID:???
でもさ学んだ技術が2,3年で陳腐化するのは悲しくないか?
他の業界と比べて技術革新のスピードがだんちなのはわかるけど。

499 :NAME IS NULL:2007/02/26(月) 09:32:27 ID:???
だから、DAOの頃からADO.netで、全く一切合切何もかも変わったか?
コネクション作って・・・って全く同じだと思うが。


500 :NAME IS NULL:2007/02/26(月) 10:08:48 ID:???
細かい言語仕様変更のたびに、表記や手順がころころ変わるのが面倒。
せめて一世代くらいは上位互換をきちんと保って欲しい。

2005でVB6.0に擦り寄ったのは、予想外に2003が普及しなかった
からだろうしさ。

501 :NAME IS NULL:2007/02/26(月) 10:33:38 ID:???
このスレの93にある
複数テーブルを読み込んでデータ更新までやるサンプル
が書いてある書籍はまだないのでしょうか?
VB6でやっていたワークテーブルを使ったデータ処理がどうしても理解できません。
(顧客マスタ(参照用)、商品マスタ(参照用)、在庫数(実際更新したいテーブル)などを一覧表示して入力させ、一括更新したいのです)
DataTableのテーブルをSQLで更新などもやはり出来ないのでしょうか?
いろいろ探してみたのですが分からないため教えてください。

502 :NAME IS NULL:2007/02/26(月) 10:43:05 ID:???
>>501
更新したいテーブルがひとつだけなら、CommandBuilder使うなり
自力でSQL書くなりしても、言うほど手間じゃないと思うんだが。

503 :NAME IS NULL:2007/02/26(月) 11:01:16 ID:???
>>502
分かりにくくて申し訳ありません。
顧客ID
商品ID
在庫数
というテーブルなのですが
実際の入力は
商品 
顧客  あ い う え お
 a   □ □ □ □ □
 b   □ □ □ □ □
 c   □ □ □ □ □
 d   □ □ □ □ □

の□の部分にデータを入力させて、横並びのデータを一括更新したいのです。
今まではワークテーブルを使ってこちょこちょやっていました。
今もワークテーブルでやる処理は出来ているのですが
遅くて困っています。
全部DataTableのメモリだけで処理して速くしたいのですが。。

504 :NAME IS NULL:2007/02/26(月) 11:19:04 ID:???
DataTable-DataViewGridの関係と、DataTable-DBのテーブルの関係は独立。
なので、UI層はそのままつくって、DBに取り込むときにがんばればよい。
ベタに作れば?


505 :NAME IS NULL:2007/02/26(月) 11:27:46 ID:???
>>504
今速くしようと考えている方法ですが
1)DataViewGrid用のDataTableを作る
2) そのDataTableに複数テーブルからデータを入れる
3) 入力させる
4) DataTableを展開してデータベースを更新する。
という方法でよろしいのでしょうか?
自分がやろうとしてる方法がいいのかどうか
いい解説本が見当たらなくて・・・

506 :NAME IS NULL:2007/02/26(月) 12:25:25 ID:???
良し悪しは最終的に自己責任。
普通にそれでいいんじゃないの?
DataTableは単なる器と割り切って。


507 :NAME IS NULL:2007/02/26(月) 14:10:57 ID:???
今回のADO.NETは、updateを手書き方式にしているのは、テーブルのリレーションを
組んだ場合でも柔軟に対応出来るようにするため、自由度を高くしたみたいなことが
書かれていたけれど、それらを一発でやろうとすると複雑になっていって、機能拡張時に
バグを生む要因になったりもするので、やはり処理するテーブルはリレーションは
もたせずにしておいて、テーブルのリレーションはプログラミングのコードで
処理する上で実現するようにした方がいいかなと思った。
こういうやり方だと、DataSetを使う必要も無くなるので、テーブルを読み込む時は、
すべてDataTableを使い、テーブルの数だけDataTableを変数宣言するようにする。
そして、処理して更新する。というやりかた。

M:Cのリレーション結果のテーブルデータを受け取り、処理する。
V:ユーザの入力
C:単一テーブルをうまく読み込んで、リレーションテーブルにする。
テーブル2個分DataTableを宣言することになるのでちょっと重くはなるけれど、
拡張性的にはこれがいいと思う。

508 :NAME IS NULL:2007/02/26(月) 14:16:59 ID:???
複数テーブルを使った更新は、分厚いADO.NET公式解説の本か、
谷尻さんの2005にあるよ。そのまま使えるかどうかは分からないけれど。

509 :NAME IS NULL:2007/02/26(月) 14:24:39 ID:???
>>506,507
ありがとうございます。とりあえず作ってみようと思います。
>>508
その本両方とも持っていますが、こういう形ではなくて困っております・・・。

510 :NAME IS NULL:2007/02/26(月) 14:33:56 ID:???
既出だけど、このソースを買って使うという方法もあると思う。
http://www.aster-world.com/soft/adonetdb.html
このクラスで、データを読み込み、このクラスが持っているDVをグリッドに連結させる。
そしてユーザが入力して、更新する時はメソッドを実行するだけ。
(複数のテーブルを読み込んでいても、更新用のコードは自動生成される。)

この方法は、かなり手軽になるけれど、そのコードがうまく動かない時の対処が
うまく出来なくなる可能性があるという欠点がある。

511 :NAME IS NULL:2007/02/26(月) 14:48:10 ID:???
>>510
よさそうですね。
LightEditionでも買ってみようかなぁ・・・。
へたな本数冊かうより勉強になるかもしれないし。

512 :NAME IS NULL:2007/02/26(月) 17:09:15 ID:???
>>511
もしも買ったら、レビューよろw

156 KB
■ このスレッドは過去ログ倉庫に格納されています

>>2731U>>9995>>4053e>>9768q>>1735WDI>>3820>>7890)U$S>>4934L>>5823>>8665J>>3239>>-ト=/test/read.cgi/db/1104630889/">★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)