ADO.NETの質問・雑談スレ2 (421レス)
上下前次1-新
16: 2009/02/14(土)19:41 ID:??? AAS
基本は読み直して再入力でしょう
楽観的ロックすらしないでおくと
先に編集したのが無効になっちゃうわけだから
オフコン使ってた時はそんなの関係ねーでやってたみたいだけどね
富士通cobolだったかな
あとはロックとかフラグたてるけどあとから来たほうが所有権
ぶんどれるような仕掛けにするとか
17: 2009/02/15(日)12:22 ID:??? AAS
>>13
既に書かれてるけど、結論はケースバイケース。
・エラーメッセージを出して更新処理を中断し、再度データ確認後に必要なら再入力。
・そんなの関係ねぇで、更新する。
俺がいつもやるのは下記の通り。
主キーとタイムスタンプでチェックし、タイムスタンプが異なっていた場合、
・エラーメッセージを表示
・更新画面でユーザが入力した値は残しつつ、現在のデータを並列表示させる。
(別画面とか入力項目の上とか画面上または下とか場合によって表示場所は事なるが・・・)
・ユーザは現在の内容を確認し、変更の必要がなければ処理を中止
省1
18: [age] 2009/02/15(日)17:16 ID:??? AAS
ケースごとに分けてWHERE以下などをどう書いていったらよいのかをまとめるといいかもね。
ケースバイケースという結論になるのも分かるけれど、どういう処理をした方が良いかは
ADO.NETは提供しない(当然だが)のだから、そのあたりのノウハウをまとめるのは必要だと思う。
0.スタンドアロン
・UPDATE時は主キーのみでおk
・将来の拡張を考えるならば、1を参考にコーディングしておくと良い。
1.小規模、同時アクセスが少ないケース
・UPDATE時のWHERE 以下は主キーとタイムスタンプで確認
・ダイアログを出して判断を促すなど。
2.同時アクセスが多く、先にデータを表示させた方が更新できるようにするケース
省3
19: [age] 2009/02/15(日)23:36 ID:??? AAS
3においてはUPDATEの内容よりも、Transaction を設定するみたいな話だな。
「ケースに分けてWHERE以下」というよりも、「ケースに分けてUPDATEの方法を」だったな。訂正
20: 2009/02/20(金)19:02 ID:??? AAS
ADO.NETになっても結局SQL文を生成するスタイルはそんなに変わらないの?
21: 2009/02/20(金)19:40 ID:??? AAS
自動生成は使ったことないな
SQL Server2008だけどManagementStudioでクエリ手書きで書いて
パラメータ化してDataadapterかDatareaderにいれるケースが多い
伝票の登録とかもsqlcommandでパラメタ化した素のinsert文とか
排他制御はtimestamp使って楽観的ロックを自前で
複雑な処理はストアドにして結果をselectで返すようにして
DatasetにFillして処理
Access使ってた時はGUIのクエリデザイナで書いてたけど
慣れたら手書きのほうがやりやすいな
22(1): [age] 2009/02/20(金)20:06 ID:??? AAS
ADO.NETは、SQLの自動生成機能を強化するかと思ってたが、そうでは無いみたい。
SQLは自分で書くスタイルを維持してて、それ以外の部分をウィザードやGUIで操作
出来るようにするモットーのようだ。(俺はウィザードやGUIはほとんど使わないけれどw)
今後は、SQLコードを書く際の支援(LINQ)をする方向に持っていくと見るといいのかな。
23(1): 2009/02/20(金)20:12 ID:p5QGPAc4(1) AAS
>>22
LINQ使ったことないけど、見ただけだと、O/Rマッパーっぽい感じがしてるんだけど
#違うか
24: 2009/02/20(金)20:14 ID:??? AAS
なるほど
自動生成スゲー!ADO.NETスゲー!って思って手を出してみたんですが、
なんとなく扱いづらい気がして結局手で書いてる自分がいて「コレでいいのか?」と疑問に。
なかなかうまくいかないなあ。
意外に人がいてびっくり。
25: [age] 2009/02/20(金)20:18 ID:??? AAS
>>23
LINQのモットーはこれじゃないの?
今までは、操作するデータが異なると、その処理を行うコードもそれにあわせて
書く必要があった。(例えば、配列の全データにアクセスするコードと、
DBからテーブルを読み込んで全データにアクセスするコードは異なる。)
そこが面倒なので、処理を行うコードを統一化しよう、という考え。
26(2): 2009/02/20(金)20:37 ID:??? AAS
linq to sql はそこそこ便利だったぞw
27: [age] 2009/02/20(金)21:50 ID:??? AAS
>>26
便利かもしれないが、しばらくの間は、規格が変わったりしそうに思う。
なので俺は ADO.NET を使うように考えてるな。
28: [age] 2009/02/20(金)22:34 ID:??? AAS
>>26
ADO.NET と関係しそうなところを中心にレビューよろw
29(3): 2009/02/21(土)15:07 ID:??? AAS
C#2008(.NET3.5)+Access(mdb)でADO.NETを勉強し始めたんだけど、usingのネストになってしまった。
ADOやらoo4oやらは弄ったことあるんだけどこれは・・・考え方がそもそも間違ってる?
//testtableから指定testidのレコードを持ってくる
using (OleDbConnection cnn = new OleDbConnection(connectionstring))
{
string selectsql = "select * from testtable where testid = @testid ";
using (OleDbCommand selectcmd = new OleDbCommand(selectsql, cnn))
{
selectcmd.Parameters.Add(new OleDbParameter("@testid", "1"));
省8
30: 2009/02/21(土)17:47 ID:??? AAS
>>29
Adapterと一緒にCommandもConnectionも生成して、
Adapterだけ解放すれば、Adapterと一緒に生成したObjectも解放される…のが理想なんだが
現実はそうならない。そのへんは色々問題があってなー
例)
DataSet ds = new DataSet();
using (SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM hoge", new SqlConnection(ConnectionString)))
{
adp.Fill(ds);
}
省3
31: 2009/02/21(土)23:16 ID:??? AAS
>>29
Connectionのusingだけで十分だ。
CommandやDataAdapterのインスタンスがDisposeされるまでに
時間がかかるが、そんなもん放っておけば良い。
重要なアンマネージリソースはConnectionにしかない。
32: 29です 2009/02/21(土)23:50 ID:??? AAS
Dispose基準は重要なリソースか・・・目からウンコがおちたようだ。
せっかくのGCを無駄にするところだったかな。
URLありがとう、じっくり読んでみます。
33(4): 2009/02/23(月)03:34 ID:kcpJjeEI(1) AAS
accessのMDBファイルに、以下のように接続してSQLを発行してます。
using (OleDbConnection cn = new OleDbConnection(m_connectString))
{
try
{
cn.Open();
OleDbCommand com = new System.Data.OleDb.OleDbCommand("SELECT name FROM Aテーブル ORDER BY sort;", cn);
OleDbDataReader reader = com.ExecuteReader();
(データを取得する処理 省略)
}
省17
34: 2009/02/23(月)09:58 ID:wqMGnrpl(1) AAS
>>(データを取得する処理 省略)
while で回してる?
35: 2009/02/23(月)20:30 ID:??? AAS
hasrowでチェックするとかしたら?
上下前次1-新書関写板覧索設栞歴
あと 386 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.020s*