ADO.NETの質問・雑談スレ2
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
2009/02/08(日) 16:12:32ID:???何でもどうぞ。
前スレ
ADO.NETの質問・雑談スレ
http://pc11.2ch.net/test/read.cgi/db/1104630889/
0002NAME IS NULL
2009/02/09(月) 20:25:16ID:???1.DataAdapterってReadOnlyにしか使えないね。
・自動生成のSQLはUpdateのコードは使えない。
・やはり、Updateは自分で生成した方が良い。
・サーバカーソルが無いしDataTableのDataRowの状態をみて自動生成のスタイルという結論に落ち着く。
2.DataSetって意味あるの?
・DataAdapterからDataTableに読み込んだ方が軽くて良い。
・GUIを中心としたスタイルならば、型指定されたDataSetもいいかもしれないが。
3.LINQ使えば無問題
・ADO.NETを使う必要はなくなるよ。
・いや、これは大幅な仕様変更が出てきそうだから当分はADO.NETじゃね?
4.DataReaderについて
・GUIよりもコードを書くスタイル、とにかく軽さを優先する、非接続の設計の場合はこれが一番。
・早くて軽いという設計だが、ADO房は無意味にこれを使いたがるから困りものだ。
0003NAME IS NULL
2009/02/10(火) 10:04:22ID:???まとめ乙。
ところで、4番の非接続は接続の間違いじゃね?
0004NAME IS NULL
2009/02/10(火) 20:27:31ID:???確かにそうだ。投下した後に気づいたが、無駄にスレを汚すので、
ま、いいやと思ってたw
0005NAME IS NULL
2009/02/12(木) 07:29:56ID:???では、具体的にどんなコードを書いたら良いの?って感じの情報交換は
出来ないのかなぁ?(ADO.NET とはずれてくる話かもしれないが)
例えば、同時アクセスが少ない場合は WHERE 以下は主キーのみで良いとか、
もうちょっとシビアに考えるならば、タイムスタンプを使ったほうが良いとか、そういう
意見交換なんだけど。
スレの誘導でもかまわないので、どなたか意見お願いします。
0006NAME IS NULL
2009/02/12(木) 21:47:30ID:???ライブラリの機能として提供できるものはこれくらいで終わりなのかな?
市販のでは、「複数のテーブルを参照する SQL によって取得したデータであっても
自動で更新するコードを生成する」ライブラリはあるようだが。
ttp://www.asterworld.com/ja/srcdoc/Asterworld.Data.AwDbExData.html
VB6までの時は、純粋にVBだけでの開発は効率が悪くて、別の会社が出してる
モジュールをあわせて購入するのが当たり前になってたけど、.NET の場合も
そんな感じに落ち着くのかな。
ttp://www.grapecity.com/japan/support/database/dotnet_productlist.htm
0007NAME IS NULL
2009/02/13(金) 01:17:49ID:???SELECTで取得した対象に主キー揃って無いとダメとか制限あったような<自動生成
自分の場合は、WHERE以下は主キー+更新時刻で楽観ロックとすることが多い。
>>6
それなりのことは.NET内で出来てしまうから、
.サードパーティの製品が必要かどうかを考え直す癖がついたな。
Excelの出力とか、客の要求が細かいときのGrid周りとか、
そういうめんどくさいところは予算と期間と相談して決めてる。
0008NAME IS NULL
2009/02/13(金) 08:11:48ID:EjaPaESHせっかくタイムスタンプがあるんだから
タイムスタンプ使った方がいいんじゃん?
0009NAME IS NULL
2009/02/13(金) 11:04:03ID:???限った話なのかな?
0010NAME IS NULL
2009/02/13(金) 11:10:20ID:???(比較的規模の小さな、数人使用のシステムの場合が多い為)
WHEREは主キーを指定するのみで、強制上書き方式でやってる。
強制上書きというのは、「読み込み時」と「データ更新直前」の
データが同じであるかをチェックせずに、主キーを指定して
UPDATEを実行という意味合い。
すでに誰かがレコードを削除していて・・・という場合はエラーが
出るが、そのあたりの処理は書く必要もないかなと思う感じ。
「設計は場合による」といってしまえばそうだが、個人レベルの
開発だとこういうのが大多数じゃないかなと思うけど、どうかな。
0011NAME IS NULL
2009/02/13(金) 13:04:13ID:???業務内容的に被らない想定のときは
更新日時の列作って使いまわしてしまう。
同じ業務の人が何人も居て被るかもーとなったらTIMESTAMP、
衝突上等となったら…行ロックするか、一次的な編集禁止フラグでも立てるか。
0012NAME IS NULL
2009/02/13(金) 20:14:08ID:EjaPaESH消えてもいいデータがあるってのならいいけど
timestamp列をつくって主キーと一緒にチェックするだけで
楽観ロックできるんだからやったほうがいいと思うけどなぁ。
0013NAME IS NULL
2009/02/13(金) 23:59:49ID:???データを更新する際、主キーは同じだけどtimestampが異なってるという時の
処理は具体的にどうするのって思ってしまうんだよね。
ユーザに(「このデータは誰かが更新中です。上書きしますか?」みたいな)
ダイアログを表示させても、ユーザは結局はそのダイアログだけでは上書きしても
良いかどうかの判断は出来ないしね。
適当に「はい」を押してしまえってなって、その機能を実装した意味が実質
なかったりするって体験があったんだけど、どうよ?
これは、たまたま俺が悪いユーザにあたっただけかな?
0014NAME IS NULL
2009/02/14(土) 00:08:41ID:???具体例を一応書いておきます。
名簿の管理ソフト
すでに登録しているAさんのデータを修正し、「更新」ボタンを押した。
その時、「すでに他の人が・・・」というメッセージが表示された。
その時点では、他の人が修正したデータの内容は確認出来ない。
また、念のためと思って更新しないで、データを確認してみると、
間違ったデータであり、自分は再度同じデータを入力する羽目に
なってしまった。ああ、面倒だ・・・みたいな。
0015NAME IS NULL
2009/02/14(土) 00:54:50ID:???間違ったデータを入れるとかかなりレアなケースだろうし、
99%くらいは、あ、オレの代わりに誰か入れといてくれたか
くらいですむんじゃね?
こんなん絶対ゆるさーん、とかいうユーザは
しょうがないからフラグでもたててロックかけるしかないんじゃね?
0016NAME IS NULL
2009/02/14(土) 19:41:36ID:???楽観的ロックすらしないでおくと
先に編集したのが無効になっちゃうわけだから
オフコン使ってた時はそんなの関係ねーでやってたみたいだけどね
富士通cobolだったかな
あとはロックとかフラグたてるけどあとから来たほうが所有権
ぶんどれるような仕掛けにするとか
0017NAME IS NULL
2009/02/15(日) 12:22:31ID:???既に書かれてるけど、結論はケースバイケース。
・エラーメッセージを出して更新処理を中断し、再度データ確認後に必要なら再入力。
・そんなの関係ねぇで、更新する。
俺がいつもやるのは下記の通り。
主キーとタイムスタンプでチェックし、タイムスタンプが異なっていた場合、
・エラーメッセージを表示
・更新画面でユーザが入力した値は残しつつ、現在のデータを並列表示させる。
(別画面とか入力項目の上とか画面上または下とか場合によって表示場所は事なるが・・・)
・ユーザは現在の内容を確認し、変更の必要がなければ処理を中止
・変更が必要な場合は再度入力値を確認、修正の後に更新を行う事ができる。
0018NAME IS NULL
2009/02/15(日) 17:16:16ID:???ケースバイケースという結論になるのも分かるけれど、どういう処理をした方が良いかは
ADO.NETは提供しない(当然だが)のだから、そのあたりのノウハウをまとめるのは必要だと思う。
0.スタンドアロン
・UPDATE時は主キーのみでおk
・将来の拡張を考えるならば、1を参考にコーディングしておくと良い。
1.小規模、同時アクセスが少ないケース
・UPDATE時のWHERE 以下は主キーとタイムスタンプで確認
・ダイアログを出して判断を促すなど。
2.同時アクセスが多く、先にデータを表示させた方が更新できるようにするケース
(列車の予約で、空席の状況を確認し、予約するなどのケース)
3.同時アクセスが多く、確実に更新処理を行いたいケース
(銀行で自分の口座から他銀行の口座へ振込みを行うなど)
0019NAME IS NULL
2009/02/15(日) 23:36:07ID:???「ケースに分けてWHERE以下」というよりも、「ケースに分けてUPDATEの方法を」だったな。訂正
0020NAME IS NULL
2009/02/20(金) 19:02:54ID:???0021NAME IS NULL
2009/02/20(金) 19:40:24ID:???SQL Server2008だけどManagementStudioでクエリ手書きで書いて
パラメータ化してDataadapterかDatareaderにいれるケースが多い
伝票の登録とかもsqlcommandでパラメタ化した素のinsert文とか
排他制御はtimestamp使って楽観的ロックを自前で
複雑な処理はストアドにして結果をselectで返すようにして
DatasetにFillして処理
Access使ってた時はGUIのクエリデザイナで書いてたけど
慣れたら手書きのほうがやりやすいな
0022NAME IS NULL
2009/02/20(金) 20:06:49ID:???SQLは自分で書くスタイルを維持してて、それ以外の部分をウィザードやGUIで操作
出来るようにするモットーのようだ。(俺はウィザードやGUIはほとんど使わないけれどw)
今後は、SQLコードを書く際の支援(LINQ)をする方向に持っていくと見るといいのかな。
0023NAME IS NULL
2009/02/20(金) 20:12:33ID:p5QGPAc4LINQ使ったことないけど、見ただけだと、O/Rマッパーっぽい感じがしてるんだけど
#違うか
0024NAME IS NULL
2009/02/20(金) 20:14:29ID:???自動生成スゲー!ADO.NETスゲー!って思って手を出してみたんですが、
なんとなく扱いづらい気がして結局手で書いてる自分がいて「コレでいいのか?」と疑問に。
なかなかうまくいかないなあ。
意外に人がいてびっくり。
0025NAME IS NULL
2009/02/20(金) 20:18:12ID:???LINQのモットーはこれじゃないの?
今までは、操作するデータが異なると、その処理を行うコードもそれにあわせて
書く必要があった。(例えば、配列の全データにアクセスするコードと、
DBからテーブルを読み込んで全データにアクセスするコードは異なる。)
そこが面倒なので、処理を行うコードを統一化しよう、という考え。
0026NAME IS NULL
2009/02/20(金) 20:37:00ID:???0027NAME IS NULL
2009/02/20(金) 21:50:55ID:???便利かもしれないが、しばらくの間は、規格が変わったりしそうに思う。
なので俺は ADO.NET を使うように考えてるな。
0028NAME IS NULL
2009/02/20(金) 22:34:52ID:???ADO.NET と関係しそうなところを中心にレビューよろw
0029NAME IS NULL
2009/02/21(土) 15:07:14ID:???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"));
using (OleDbDataAdapter da = new OleDbDataAdapter(selectcmd))
{
DataSet ds = new DataSet();
da.Fill(ds);
:
:
田舎なので本屋にプログラミング関係の本がない・・・
「プログラミングMicrosoft ADO.NET2.0」って良書ですか?
0030NAME IS NULL
2009/02/21(土) 17:47:12ID:???Adapterと一緒にCommandもConnectionも生成して、
Adapterだけ解放すれば、Adapterと一緒に生成したObjectも解放される…のが理想なんだが
現実はそうならない。そのへんは色々問題があってなー
例)
DataSet ds = new DataSet();
using (SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM hoge", new SqlConnection(ConnectionString)))
{
adp.Fill(ds);
}
これで済ませたいところなんだけど…このとき生成されたCommandやConnectionは解放されない。まさに仕様という名のバグw
このへんからいくつか辿ってみるとちょっと良いことあるかもしれない。
http://www.ailight.jp/blog/mnow/archive/2006/05/28.aspx
0031NAME IS NULL
2009/02/21(土) 23:16:30ID:???Connectionのusingだけで十分だ。
CommandやDataAdapterのインスタンスがDisposeされるまでに
時間がかかるが、そんなもん放っておけば良い。
重要なアンマネージリソースはConnectionにしかない。
003229です
2009/02/21(土) 23:50:13ID:???せっかくのGCを無駄にするところだったかな。
URLありがとう、じっくり読んでみます。
0033NAME IS NULL
2009/02/23(月) 03:34:32ID:kcpJjeEIusing (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();
(データを取得する処理 省略)
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
finally
{
cn.Close();
}
}
このとき、SQLの対象のAテーブルにレコードがあれば問題なく動くんですが、
Aテーブルにレコードが1件もないとき、com.ExecuteReader()で例外が発生します。
例外の内容は
Message="1 つ以上の必要なパラメータの値が設定されていません。"
Source="Microsoft JET Database Engine"
ErrorCode=-2147217904
StackTraceはExecuteReader()の行です。
どうやったらレコードが1件もないときにExecuteReader()で例外を発生させないようにできるのでしょうか。
0034NAME IS NULL
2009/02/23(月) 09:58:47ID:wqMGnrplwhile で回してる?
0035NAME IS NULL
2009/02/23(月) 20:30:44ID:???0036NAME IS NULL
2009/02/23(月) 21:18:04ID:???テーブル名と列名全部ブラケットで括ってみ。
//CurrentRecordが無いところでFieldを参照しようとした場合はInvalidOperationExceptionになる。
//OleDbExectionにはならん。
0037NAME IS NULL
2009/02/23(月) 21:31:53ID:???0038NAME IS NULL
2009/02/23(月) 22:10:44ID:???catchで捕まえたからではなく、ステップ実行してそこで例外発生したって認識でOK?
フィールド名のtypoだったらレコードの有無に関わらず発生しそうなものだけど・・・。
同じく試してみたけど再現しないですね。
0039NAME IS NULL
2009/02/23(月) 22:20:28ID:???{
// データないときの処理
}
:
…なんてやってるわけないよね。
0040NAME IS NULL
2009/02/24(火) 08:55:02ID:???テーブルは存在してるんだよな?
0041NAME IS NULL
2009/02/24(火) 19:24:19ID:???0042NAME IS NULL
2009/02/25(水) 06:57:33ID:???どうやったらっていうか、普通レコードがなくても例外は発生しません
JETのSQLが間違ってる時のエラーメッセージはかなりいい加減だからなぁ
ほんとにExecuteReaderでエラーになってるなら、フィールド関係ないとは思うんだが、
実際に実行してるSQLは>>33とまったく同一?
JETはカラムかテーブル名が見つからないと、パラメータが足りないみたいなメッセージを出す時がある
だから>>36や>>40のような指摘があるわけなんだが...nameやsortが予約語だったりするのか?
あと可能性としてはMDBが壊れてる可能性もあるな
一度ACCESSで修復かけてみては?
0043NAME IS NULL
2009/02/25(水) 11:43:53ID:???ソース見るに finally は try ブロック内で実行されると思ってない?
あくまで finally が実行されるタイミングはメソッド終了時。
using で宣言してるオブジェクトが解放されるタイミングもそう。
メソッドがこのソースで完結してるなら問題はでないと思うけど、
ほかにもいろいろ処理が含まれるなら思わぬ問題が出る可能性があるね。
using or try のネストはその辺理解して使わないと後でめんどいよ。
つーことでこのソースだけじゃ不具合原因はわからんと思う。
>>42 が言うように JET のエラーメッセージは当てにならんw
0044NAME IS NULL
2009/02/25(水) 22:33:57ID:???Using db As New SqlConnection(db.ConnectionString)
Using ocmd As SqlCommand = db.CreateCommand
Using adp As New SqlDataAdapter(cmd)
cmd.CommandText = sql1
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@01","01")
adp.Fill(DS)
If DS.Tables(0).Rows(0).Item(0).ToString <> "OK" Then
msg = DS.Tables(0).Rows(0).Item(0).ToString
Return -1
End If
Return 1
End Using
End Using
End Using
こんな感じでdataset使ってるんですがdatasetから値を取り出すのってこれがベストな
方法なの?
datareaderならgetstringとgetint32とかデータ型にあった方法あるけど
0045NAME IS NULL
2009/02/26(木) 01:35:24ID:???単一の値を取ってくるなら、ExecuteScalarを利用すると良いよ。
あと、型があらかじめわかってるならToStringやCTypeよりDirectCastの方が良いな。
0046NAME IS NULL
2009/02/26(木) 04:16:14ID:???揚げ足をとるみたいだが、それはDBから値をとるなら、だな
まあ、まずデータセット使う必要があるのかという話もあるんだがw
データセットから値を取り出すなら、って質問だし、
ここは型付きデータセット使えってのがMS的推奨回答じゃないかな
0047NAME IS NULL
2009/02/26(木) 08:41:34ID:???型付データセットを使わない場合であれば、どんな型で入ってくるかは
http://msdn.microsoft.com/ja-jp/library/cc716729.aspx
004844
2009/02/26(木) 11:47:22ID:???さくっとSQL書いて結果欲しい時にいちいちデザイナ?xml?とか
0049NAME IS NULL
2009/02/26(木) 13:53:28ID:???DataReaderつかえよ。まさに>>45の指摘の通りだ。>>2のまとめも読んでみろ
データセットから値をとりだすのは、まあどんな方法も似たり寄ったりだろう
コードの書き方とかキャストのしかたとかに多少の差がでる程度かと
0050NAME IS NULL
2009/02/27(金) 23:11:52ID:???そうせざるを得ないんだよなあ・・・(´・ω・`)
0051NAME IS NULL
2009/02/28(土) 07:26:54ID:???比較としてどんなコードが美しいのかを書いてくれた方が話も進むと思うんだが。
0052NAME IS NULL
2009/02/28(土) 14:36:21ID:???イヤ直感的な意味であって「これがいい!」というのはないんだ、すまない。
0053NAME IS NULL
2009/02/28(土) 22:06:39ID:???datasetにfillして取り出す時に適当にcastする方が楽だんだよね〜
ちょっとした印刷なら全部tostringで済んじゃうし
0054NAME IS NULL
2009/02/28(土) 22:18:44ID:???0055NAME IS NULL
2009/02/28(土) 22:35:46ID:???ドラッグ&ドロップで帳票が作れるところまで機能があれば、
Access依存度も解消できるのになぁ。。。
なんか、DataSetにFillっていうのは、ちゅうぶらりんな気がする。
0056NAME IS NULL
2009/02/28(土) 22:45:31ID:???2.DataSetって意味あるの?
・DataAdapterからDataTableに読み込んだ方が軽くて良い。
・GUIを中心としたスタイルならば、型指定されたDataSetもいいかもしれないが。
0057NAME IS NULL
2009/03/01(日) 04:25:39ID:???0058NAME IS NULL
2009/03/01(日) 09:15:46ID:???参照されたし
http://msdn.microsoft.com/ja-jp/library/esbykkzb.aspx
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html
object型じゃなくて厳密に型が決まっているからコンパイル時にチェックができたりインテリセンスが効いたり
0059NAME IS NULL
2009/03/01(日) 12:31:11ID:???0060NAME IS NULL
2009/03/01(日) 21:22:31ID:???出てくるようになったのかなと思った。
ちょっと前までは、MSDNや公式図書くらいしか情報源が無くて、それを
しっかりと読んだ人たちだけが書き込みしてたような感があったからなぁ。
0061NAME IS NULL
2009/03/01(日) 23:12:28ID:???今の.NET環境は敷居が高すぎると思うんだが
0062NAME IS NULL
2009/03/02(月) 00:06:03ID:???MySQL, Postgres, SQLiteとかで。
0063NAME IS NULL
2009/03/02(月) 00:16:35ID:???0064NAME IS NULL
2009/03/02(月) 22:59:41ID:???そうなんだよな。だから、VBが誰でも組めるお手軽言語じゃなくなってしまった。
VB6は完全にサポート打ち切ってしまったしね。
それで、VB.NETの意義もちゅうぶらりんな感じになった。
代わりに、ADO.NETなどが非常に使い勝手の良い、便利な機能満載の
物であればいいのだが、実際は、他の言語でDB接続する場合と大きく変わらない。
言語仕様を大幅に変えてしまった上、過去のバージョンのサポート打ち切り、
開発ツールの販売ばかりを考えた方針にあきれてしまって、VBでの開発を
打ち切る方向にしたところ、結構あるんじゃないかな。
0065NAME IS NULL
2009/03/03(火) 01:53:13ID:???正直、VB6なんてもう触りたくねー
Windows7でも動作することになったからまだ続くんだろうけど。
開発ツールの販売って、何か問題ある?
土方業務用なら、MSDNサブスクリプション1人1ライセンスで大体は事足りると思う。
まぁそれすらケチる会社もあるがw
0066NAME IS NULL
2009/03/03(火) 21:16:08ID:???一人1ライセンスじゃねー
会社で1ライセンスじゃあああああああああああ
0067NAME IS NULL
2009/03/04(水) 04:25:50ID:???INSERTしなくちゃいけない事が多いと思うんだけど、その辺のめんどくさい処理を
DataAdapterとかで上手く処理出来たりする?
親テーブルに未追加だったら追加して……、あたりの処理も含めて。
0068NAME IS NULL
2009/03/04(水) 18:10:08ID:???残念だが、DataAdapterは、各種Commandオブジェクトに格納されている
SQL文を実行するくらいの機能しかもちあわせていない。
0069NAME IS NULL
2009/03/04(水) 18:14:34ID:???(同じようなものを0から作ろうとすると、非常に面倒なのは分かるが)
・各種DBに接続するためのコネクションなどが準備されている。
・DataTableがあるので、配列を準備してテーブルのデータを読み込んで処理する手間が省ける。
これぐらいかな。
>>67がいうような、DBで行うことの多い処理を自動でやってくれるような
クラスが準備されているのであれば、非常にいいんだろうけどな。
(処理速度が多少遅くなる分はいいとして。)
それが無いから、特に魅力を感じなかったりする。
0070NAME IS NULL
2009/03/06(金) 08:03:04ID:???これに、ADO.NET で接続するプログラムを追加しても、問題ないとみていいのかな?
それとも、VB6 と VB.NET の混在は開発元がサポート範囲内では無いと
考えているので、あまり好ましくないとなるのかな?
0071NAME IS NULL
2009/03/06(金) 08:10:38ID:???0072NAME IS NULL
2009/03/06(金) 22:02:55ID:???0073NAME IS NULL
2009/03/07(土) 03:33:25ID:???フォームにテキストボックス2つとボタン1つを配置して
2つのテキストボックスにIDとパスワードを入れて
ボタンを押したらDBを見に行って、一致していたら別のフォームに遷移させる
というプログラムを以下のように記述したのですが、うまく遷移できません。
何がおかしいのでしょうか?
環境はVC++2005 EEと
SQLServer 2005 EE
です。
ちなみに、testTableのLoginID列とPassword列の値はともに Adminとしてあり、
データ型はnvarcharです。
テキストボックスにそれぞれAdminと入力してボタン押下しても遷移できず、
メッセージボックスが表示されてしまいます。。。
FrmTest^ frmtest = gcnew FrmTest();
SqlConnection^ conn;
conn = gcnew SqlConnection();
conn->ConnectionString =
"Data Source=xxx;" +
"Integrated Security=True;" +
"Initial Catalog=xxx;";
if(textBox1->Text != "" && textBox2->Text != "")
{
SqlCommand^ cmd = gcnew SqlCommand("SELECT * FROM dbo.testTable",conn);
SqlDataReader^ dr = cmd->ExecuteReader();
while(dr->Read())
{
if(dr["LoginID"] == textBox1->Text && dr["Password"] == textBox2->Text)
{
frmtest->ShowDialog();
}
else
{
MessageBox::Show("ユーザIDまたはパスワードが違います。");
}
}
0074NAME IS NULL
2009/03/07(土) 09:19:04ID:???メッセージボックスが表示されるというのは、何のメッセージボックスなの?
システムエラーメッセージとか?
MessageBox::Show("ユーザIDまたはパスワードが違います。");
これのことだったら、必ず表示されると思うんだが。
0075NAME IS NULL
2009/03/07(土) 09:45:01ID:???MessageBox::Show("ユーザIDまたはパスワードが違います。");
↑
これが表示されます。
if(dr["LoginID"] == textBox1->Text && dr["Password"] == textBox2->Text)
{
frmtest->ShowDialog();
}
↑
ここが実行されて欲しいんです。
ボタンを押したときにテキストボックスに入力したIDとパスワードがDBに登録されているデータと比較して一致していたら遷移する
というふうにしたいのです。
なぜ必ず偽になってしまうのか分かりません。
0076NAME IS NULL
2009/03/07(土) 12:59:27ID:???ADO.NETの話じゃないぞ。
もう、プログラム辞めたら?
0077NAME IS NULL
2009/03/07(土) 18:49:49ID:???話はそれからだ
0078NAME IS NULL
2009/03/07(土) 19:26:12ID:???0079NAME IS NULL
2009/03/08(日) 18:12:29ID:???dr["LoginID"] textBox1->Text dr["Password"] textBox2->Textも混ぜとけば
0081NAME IS NULL
2009/03/09(月) 20:40:39ID:???0082NAME IS NULL
2009/03/10(火) 22:36:36ID:???0083NAME IS NULL
2009/03/11(水) 00:45:52ID:???パスワード忘れたから教えろとかうぜーんだよ
0084NAME IS NULL
2009/03/11(水) 10:44:10ID:???復元可能な形にするかどうかは運用次第。
0085NAME IS NULL
2009/03/14(土) 16:10:51ID:???第7回 ADO.NET開発初心者の疑問、解決します!
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_07/opensemi_07_01.html
@ITの記事もだいぶ増えてきたね。
内容としては、2ちゃんねるのスレで語られたことの要約だと感じる部分が多いがw
0086NAME IS NULL
2009/03/14(土) 19:41:11ID:???なんか初心者向け?っぽいね
パネラーは熟練者なんだろうけど
0087NAME IS NULL
2009/03/15(日) 16:09:16ID:???非接続型への対応ということだが、それ以外に語っていないということは、
特に目立ったメリットがないということなんだなw
つまり、大きなメリットはないが、状況的に変えなければならないので、
我慢をして受け入れなさい、とw
こういうところで、VBの言語仕様が複雑になったことをフォローできる
くらい大きな便利機能があるべきだと思うのだが。
0088NAME IS NULL
2009/03/16(月) 07:19:03ID:???> メリットとしては、いろいろなDBへの接続クラスが準備されていることと、
これ全然メリットじゃないよね
よし、今日はオラクルでいっとくか
雨の日はMS SQLにしとくか
週末はDB2だな。アゥ
0089NAME IS NULL
2009/03/18(水) 14:49:44ID:???何も考えずにサーバカーソル使われることが無くなったのが
一番のメリットかもしれん。
0090NAME IS NULL
2009/03/22(日) 10:26:54ID:s8j4mKbf#と普段VB6が多いので、特にそう思う
>>88
オレもそう思う
>>89
countとるのめんどいからいや
0091NAME IS NULL
2009/03/23(月) 23:10:33ID:???0092NAME IS NULL
2009/03/31(火) 02:02:31ID:???エントリ系のプログラムで、伝票Noを叩いた時には、Datasetで取得して、非連結フィールド・datagridviewへセットして見せてます。
ここまでは良いと思っていますが、その後にDataを修正・実行ボタン等でsqlserverへ更新しに行く時に、非接続でのUpdateを使わずに、接続型で更新しに行ってます。
例えばDataがdatagridviewにセットされている場合は、レコード数分loopしてUpdateしてます。
というのも、Transaction内での非接続による処理がネットを検索してもあまり出て来ず、Taransaction使うなら接続型っていう頭になっちゃってます。
なので、FormにData引っ張ってくる時は非接続型、sqlserverへ追加・更新次時は接続型でいつもやっているのですが。。
これってイレギュラーですか?
0093NAME IS NULL
2009/03/31(火) 07:38:10ID:???0094NAME IS NULL
2009/03/31(火) 12:01:31ID:???1Transaction内で、接続型・非接続型の両方を使いたいと思ったりするのは私だけでしょうか。
現実的には接続型で接続中に非接続型を利用・・・・もしくはその反対(もちろん1Transaction内)
これって?
System.Transactionsでも使えばどうよ
0096NAME IS NULL
2009/03/31(火) 18:03:26ID:???ありがとう。
System.Transactions見てみたけど、敷居高そうな希ガス。
0097NAME IS NULL
2009/04/01(水) 01:39:46ID:???0098NAME IS NULL
2009/04/01(水) 05:55:40ID:???接続型とか非接続型とか分けて考えるのがおかしくないか?
接続型、非接続型と、連結、非連結の区別がついてないんじゃないか?
0099NAME IS NULL
2009/04/01(水) 10:43:14ID:???>接続型とか非接続型とか分けて考えるのがおかしくないか?
分けて考えるのは当然と思っていますが。
まったく動作が異なるので。
もちろんDB更新時には接続型・非接続型関係なく接続しないと更新できない訳で。。
それを承知で、1Transaction内で接続型・非接続型の両方を使うということについて
意見を聞いていたのですが。。
0100NAME IS NULL
2009/04/01(水) 10:44:15ID:???>>97
>sql server相手なら余裕
そうなの?
0101NAME IS NULL
2009/04/01(水) 14:18:45ID:???>まったく動作が異なるので。
俺にはDBの更新については本質的に同じだと思うんだが
ADO.NETが接続型ならサーバカーソルでカレント行更新できるとか言うなら話は違うが
あなたのいう、「非接続でのUpdate」と「接続型で更新」というのを、具体的に挙げてみてくれないか?
0102NAME IS NULL
2009/04/01(水) 18:01:50ID:???すまん。「まったく動作が異なるので。」っていう表現は間違っていた。
DB更新に至るまでのプロセスが違うっていう意味で言ってた。
0103NAME IS NULL
2009/04/01(水) 18:55:07ID:???DataReaderで更新はできなかったはず
0104NAME IS NULL
2009/04/01(水) 22:06:36ID:???>接続型って、DataReaderしかなかった気がする
ん? 何寝ぼけたこと言ってんの?
>DataReaderで更新はできなかったはず
当たり前。
ExecuteNonQueryって知らないの・・・?
もう一度勉強してこいや!
0105NAME IS NULL
2009/04/02(木) 08:14:28ID:???>ExecuteNonQueryって知らないの・・・?
いやそれは知ってるが・・・
>もう一度勉強してこいや!
勉強してきた。
確かにExecuteNonQueryは接続型になってるな
自分で楽観的ロック作りこんで接続1回切っても接続型なのかよ
ちょっとショックだ
MS的には
非接続型=DataAdapter
接続型=Commandオブジェクト
らしいが、DataAdapterが実際のDB操作に使うのはCommandオブジェクトなんだよな
それでも自分でCommandオブジェクト使うと接続型ってのはちょっとどうなのよ
>>94
非接続型=DataAdapterらしいので、DataAdapterで処理できないなら混在せざるをえないな
DataSetに対してSQL発行できない以上、混在するのは避けられないんじゃない
そもそもDataAdapterがDBに対してCommandオブジェクトでSQL発行するので
DB的に混在が問題になるとは思えない
あとはプログラミングスタイルの問題だけじゃないかな
0106NAME IS NULL
2009/04/02(木) 19:28:27ID:???言ってる意味がよくわからん
0107NAME IS NULL
2009/04/02(木) 21:00:07ID:???わかってないだろ
0108NAME IS NULL
2009/04/02(木) 23:37:34ID:???たぶんADO.NETは使ったこと無いんだろうな。
0109NAME IS NULL
2009/04/03(金) 08:43:50ID:???>非接続型=DataAdapter
>接続型=Commandオブジェクト
って書いてあるだろ。
根拠はttp://msdn.microsoft.com/ja-jp/events/dd279508.aspx のコラム欄な
これが間違ってるならぜひ教えてほしい
なんかその区別に意味があるのかわからなくなってきたぜ
0110NAME IS NULL
2009/04/03(金) 17:52:25ID:???その第一回をよく読め。
あんたの知りたいことが全て載っている。
0111NAME IS NULL
2009/04/03(金) 23:21:19ID:???まあ確かに、非接続型=DataAdapter、接続型=Commandオブジェクト は短絡的すぎるかもしれない
で、聞いてみたい
このコラムの1回目の リスト7 非接続データアクセスでのトランザクション更新のサンプル
UPDLOCK指定したSELECT発行して、トランザクション発行して(しかもシリアライズで)コネクションオープンしたままだ
これは実験してないし違ってるかもしれないが、おそらくデータセットのデータ更新してる間も実際にDBと接続を保ったままだろう
これでも、非接続型らしい
自分で楽観的ロック作りこんで接続1回切るようなスタイルはどっちだと判定する?
このコラムの指針なら、データセット使わないと接続型か
俺の考え方だと、
ある作業をしている間DBへの接続を保つのは接続型、
その間接続を開放して再度接続するのが非接続型、
という区別であるべきだと思うんだが(実際第1回でもそういう風に説明されている)、
データセット更新中に接続をたもっていても非接続型
データ取得して接続を開放し、再度接続してDB更新しても接続型
とされる今の非接続型、接続型の区別にどんな意味があるんだ?
第1回には
>DBMS への接続時のデータアクセスにおいては、どちらも本質的な違いはない。
とも書いてあるな。
つまりDBMS観点ではその区別に意味はなく、じゃあこれを区別する意味はどこにあるんだ?
0112NAME IS NULL
2009/04/04(土) 01:31:10ID:???0113NAME IS NULL
2009/04/04(土) 02:40:17ID:???らしいぞ。ネットワークの負荷に差がでる理由を教えてくれ
ローカルのデータセット更新中も接続を保持する非接続型があるってことも考慮してくれな
0114NAME IS NULL
2009/04/04(土) 11:28:20ID:???なんだか、システムを組んだことがないニートの戯言のような雰囲気を
感じるのだが。
敷居が高そうだから使わないとか、理由がお粗末杉。
0115NAME IS NULL
2009/04/04(土) 16:00:52ID:???だからちゃんと記事を読めよw
0116NAME IS NULL
2009/04/04(土) 18:06:39ID:???という意見を持っている人は、LINQ to SQL(広く言うとO/Rマッピング)を使う気にはなれず、
ADO.NETを使い続けるのかな?
となると、今後の.NETのDB関連のコーディングスタイルは二分化していくよな。
お互いのコーディングの比較の議論が交わされるとか。
0117NAME IS NULL
2009/04/04(土) 18:16:19ID:???対する非接続型のデータ更新メカニズムもサポートされているとあるが、
俺はそればっかり使ってたから、ADO.NETになって、DataAdapter.Update()が
思うように動作せず、非常に苦労したw
なんでバージョンアップなのに、UPDATEする際はSQL文をかかないといけないんだ
みたいなw
ADOの時は、SQL文はSELECTのみ書いて、あとはrecordset.update()
っていうスタイルの人、結構いたんじゃないかな。
0118NAME IS NULL
2009/04/04(土) 18:30:02ID:???まじめに、ちゃんと記事を読んだ上で、ネットワーク負荷に差が出る理由がわからんのだが
バカな俺にわかるように説明してくれないか
0119NAME IS NULL
2009/04/04(土) 21:22:30ID:???Entity Frameworkに期待しなさい。今は過渡期である。
0120NAME IS NULL
2009/04/05(日) 03:16:11ID:???0121NAME IS NULL
2009/04/05(日) 09:34:13ID:???0122NAME IS NULL
2009/04/05(日) 16:11:09ID:???ストアドプロシージャとか使わないのかな?
ビジネスロジックを分けるという考え方よりも、SQL自動生成のクラスを
自作しているという感じで、O/Rマッピングを行うクラスを自作するような感じ?
0123NAME IS NULL
2009/04/06(月) 23:04:14ID:???92だけど、102までしか引っ張ってませんが ^^;
0124NAME IS NULL
2009/04/06(月) 23:10:40ID:???理由がお粗末で申し訳なかったね。
自分は分からないから、具体的に説明して。
どうせ、理由付けて教えては貰えないだろうけど。。(笑
0125NAME IS NULL
2009/04/06(月) 23:56:59ID:???んで俺的結論はそんな区別に大した意味ないから気にする必要はない、だが
ネットワーク負荷に差が出るんだから区別する意味はあるという人もいるみたい
負荷に差が出る理由はいくら考えてもわからないんで本気で教えてほしいんだがなぁ
0126NAME IS NULL
2009/04/07(火) 07:34:48ID:???スタンドアロン、もしくは、それに近い環境のシステムしかイメージして無いから
そういう風になるんじゃないの?
もっと、大容量のデータをやりとりするとか、端末がたくさんつながっているとか
そういうケースもイメージしてでの結論なのか?
念のために解説しておくが、前者の場合は、違いはほとんどない。
0127NAME IS NULL
2009/04/07(火) 11:03:39ID:???大容量のデータやり取りで差がでるのなら、少量のデータでも少々の差がでてるはずだよな
その差が大量になれば顕著になるだけの話だろ
実際にどのくらいの差が出るかはともかく、差が出る理由が知りたいんだが
同じように、端末何台あろうとも、負荷の差がでる理由にはならんわな
もしかしてお前の言うネットワークの負荷ってのは、アクセス集中だけをいってるのか?
負荷に差がでるんだから、1台あたりのトラヒック量に差が出ると解釈してるんだが
あ、ちなみに、接続型と非接続型で、どっちか負荷が高くてどっちが低いのだ?
0128NAME IS NULL
2009/04/07(火) 11:12:01ID:???MSが独自に提案している用語だろ?
実際にぐぐってみるとADO.NETのページばかりがヒットする。
だから、「なんか詳しいことはよくわからないけれど」程度に
理解しておいてもいいんじゃないの?
第三者の俺から見ると、用語の定義についてしつこく
掘り下げて質問してる意図が良く分らんのだが。
0129NAME IS NULL
2009/04/07(火) 11:49:20ID:???ここADO.NETの質問・雑談スレだし
ま、しつこ言わいとれれば実際そのとおりだが
いまの流れは、
>今の非接続型、接続型の区別にどんな意味があるんだ?
に対して、
>ネットワークの負荷だろ
ときて
>ネットワークの負荷に差がでる理由を教えてくれ
となり>>126へ
0130NAME IS NULL
2009/04/07(火) 14:06:50ID:???接続型と非接続型の違いは、「DBに接続し、データの取得や更新を
する過程の部分」には無く、「取得したデータをローカルのメモリに
保存してるかどうか」の部分にあると思う。
だから、DataSetを使っていると非接続型、DataReaderは接続型
という風に分類されている。
0131NAME IS NULL
2009/04/07(火) 14:14:00ID:???ことだけど、「DataReaderを使いたがるスタイル」は、ADO房や
VB6プログラマに限ったことじゃないような気がする。
java(JDBC使い)から.NET開発に移ってきた人も、以前までやっていた
ものと似たようなスタイルでコーディング出来るDataReaderを
使いたがるんじゃないかな。
DB操作用のモジュールで、一般的な設計に近いものがDataReaderで
ある為、他の人にとって読みにくい!みたいな、問題が起きるような
気がする。
0132NAME IS NULL
2009/04/07(火) 18:08:19ID:???この文書には、「非接続型=DataSetクラスを使っていること」とあるな。
「接続型」、「非接続型」の用語の理解はこれでいいんじゃないの?
ネットワークの負荷の違いは、そのアプリケーションの組み方次第なので、
一概には言えない。(その人がイメージしているアプリの形によって差が
でるので、「こちらの方が負荷が違う」ということが多い)
0133NAME IS NULL
2009/04/07(火) 19:52:47ID:???「接続型=DataSetクラスを使っていないこと」ではないと思うんだな。
「接続型」と積極的に言えるのはせいぜいADOなどで更新やスクロール可能な
結果セットを使った場合だと思う。
CommandやDataReaderクラスは非接続型か接続型という分類じゃなく、
そられを実現するための基本的なADO.NETデータプロバイダのファンクションそのものであると考えるべき。
ADO.NETを解釈すると、データプロバイダ(ドライバ)+DataSetフレームワークというべきもので
あるが、たびたびデータプロバイダのみをADO.NETと呼んだりするのでややこしいい。
ADO.NET Entity Frameworkでもデータプロバイダは共通なんだよね。
0134NAME IS NULL
2009/04/07(火) 21:59:14ID:???それ、昔の.NETマガジンの記事だな
その記事みると、接続型はサーバカーソルのようにみえるな
まあ、対象がORACLEなんで若干の違いがあるのかもしれないが、
ADO.NETではサーバカーソルは(ADO.NETの機能としては)サポートしてなくて
DataReaderでさえサーバカーソルは使わないらしいが...
その記事でも、接続、非接続の区別が大事だって書いてあるなぁ
「非接続型=DataSetクラスを使っていること」が定義になるだろうってことに反対はしないが
>>130 がいうように、、「取得したデータをローカルのメモリに保存してるかどうか」が大事なとこなんだろうな
結果としてDataSetを使ってるというだけで
だから>>133の言うように>「接続型=DataSetクラスを使っていないこと」ではないと
ただ、その定義にしたがって考えれば、
「ローカルのデータセット更新中も接続を保持する非接続型がある」ことになるんだが
だったらその定義や、接続、非接続の区別が重要だとは思えないんだよな
接続型か非接続型かじゃなくて、コネクションをオープンしたままなのかクローズしてあるのか、
サーバ側のロックを保持してるのかどうかが大事なんだと思うんだが...
非接続型って言うと、どうしてもサーバ側のロック持てないイメージがあるんだ
名前がよくないのかもしれないな。これ、英語ではどんな単語で表現されてるんだろうなぁ
0135NAME IS NULL
2009/04/07(火) 22:45:12ID:???0136NAME IS NULL
2009/04/08(水) 07:42:13ID:???ようなものだと思ってるんだけどな。そもそも、DB接続プログラミングに関して
そのような用語や概念は無かったのだから、DB設計をしたり実装したりする
時においてはさほど重要ではないと思う。
0137NAME IS NULL
2009/04/08(水) 09:44:01ID:???それぞれ、mysql_store_result()とmysql_use_result()でしょ?
0138NAME IS NULL
2009/04/08(水) 09:44:50ID:???0139NAME IS NULL
2009/04/08(水) 10:42:48ID:???いい事いうじゃねえか。
出来るんだな?
今すぐ頼むぞ。
0140NAME IS NULL
2009/04/08(水) 14:45:53ID:???MySQLよく知らないんで、その違いを説明してくれないか
ADO.NETのスレでMySQLに例える意味がわからんが
0141NAME IS NULL
2009/04/08(水) 23:29:36ID:???0142NAME IS NULL
2009/04/09(木) 00:16:01ID:???今回、初のASP.NETの開発のため調査しています。
いまのところ、ASP.NETのDB処理は「非接続」で実装(javaと同じような)
すればよいという認識ですが、正しいでしょうか?
そもそも、このスレは、ASP.NETは考慮せずに、
Windowsアプリのみを想定しているのでしょうか?
>>2
の「前スレの流れ」はASP.NETとWindowsアプリの区別は無いのでしょうか
0143NAME IS NULL
2009/04/09(木) 00:46:51ID:???例えば接続型のDataReaderの方がパフォーマンスは良い。
しかし、順方向への読取専用にしか使えないので、
例えばGridViewのページングを使いたいような場合には向かない(できない)。
0144NAME IS NULL
2009/04/09(木) 01:14:14ID:???すぐ上で接続型と非接続型に対する議論が白熱してるw
で、俺はjavaはわからんのだが、javaと同じような非接続の実装ってのはどういうもんなんだろ
>>131なんかが言うには、javaだとDataReader使うようなスタイルになるみたいだけど、
それなら分類的にはどっちかっていうと接続型だと思うが...
まあ、少なくともDB周りにおいてはその区別は重要ではないという流れではあると思う
WebアプリかWindowsアプリかについては、俺の私的意見ではあるが、ADO.NETは
Webアプリ的思考をWindowsアプリにも適用する方向に向かって進んできたので
Webアプリにおいてはあまりその違いを重要視する必要がないと思う
Webアプリなら特性上、楽観的ロックでコネクションは即時解放ってスタイルにならざるをえないと思うが
まあ普通にADO.NET使って作ってればそうなってると思うw
0145NAME IS NULL
2009/04/09(木) 07:25:46ID:???文面からすると、「javaは非接続型で実装するスタイルがメインである」と
読み取れるのだが、JDBCの場合、テーブルデータをローカルメモリに
保存する機能のクラスはないのだから、「javaは接続型」だと思うのだが。
javaであなたが実際に実装する際に使っているライブラリやクラス名を
教えて欲しい。(O/Rマッピングあたりなのかな?)
このあたりがはっきりしないとレスもしようが無いので。
0146NAME IS NULL
2009/04/09(木) 15:59:01ID:???MDBファイルの新規作成はできないのでしょうか?
COMを使えばできるのは解ってます。
0147NAME IS NULL
2009/04/09(木) 19:58:32ID:???ADO.NETはあくまでも既存のDBに接続するためのものってことだな
0148142
2009/04/09(木) 21:05:04ID:???>>145
142です。ああああ、ごめんなさい。
ご指摘の通り、javaは「接続型」です。記入間違いです。
混乱させてしまいました。
>>143
ですよね。
GridViewのページングのためしか、「非接続型」は使えないきがする。
>>144
>すぐ上で接続型と非接続型に対する議論
この論議がWindowsアプリを前提にしているのかなぁ?
と思ったので質問しました。
>Webアプリなら特性上、楽観的ロックでコネクションは即時解放ってスタイル
ですよね。そうかなと思ってたので、安心しました。
>>145
ちなみにjavaのDB処理は、DbUtils好きです。
O/Rマッピングは、わかりにくいのであまり好きじゃありません。
今回のASP.NETの開発は、基本は「接続型」で
GridViewのページング機能を使うなら「非接続型」使用します。
ありがとうございました。
0149NAME IS NULL
2009/04/10(金) 07:59:01ID:???話の整理をする意味合いでの意見だが、
ファイル操作はADO.NETの範囲ではない。
0150NAME IS NULL
2009/04/10(金) 16:34:35ID:???MDBファイルの新規作成を、ファイル操作って言っちゃうと
ちょっと議論がずれるとおもうぞ
MDBファイルの新規作成=JetでのDBの新規作成 って意味だと思うんだ
Jetが(実際は無理なんだが)create databaseとかのSQLでMDB作れるなら、
ADO.NETからSQL発行すれば可能なんだろうけど、その場合でも
それはADO.NETの守備範囲ではないと思うんだ
0151NAME IS NULL
2009/04/10(金) 17:54:13ID:???ひな型となるものを作っておいてコピーするとか。
そもそもMDBは、それに接続してDB作成とかいう概念がないはず。
DB が SQL Server であれば、作成は可能だが。
http://support.microsoft.com/kb/305079/ja
0152NAME IS NULL
2009/04/10(金) 20:44:16ID:???ADOX使えばできるだろうという話はまあ置いといて
ファイル操作がADO.NETの範囲外なのは当然なんだよ
ただ、MDBの新規作成は、元来はファイル操作じゃなくてDBMS操作だろう、ってことだ
>>150は、DBMS操作は(たとえSQL発行で実現できたとしても)ADO.NETの範囲外だろう、と主張してる
0153NAME IS NULL
2009/04/11(土) 14:11:27ID:???・接続方式のプログラミングは、概念は同じ。
DBに接続して、SELECTして・・・
・非接続方式はADO.NETだけ
格納用に配列を準備してそれに代入して・・・という処理を
書かなくて済む分、DataTableは便利。
・ADO.NETは選択肢が無い
O/Rマッピングあたりになると、javaは選択肢がたくさんあるが、
.NETだと、LINQしかない。
これはプロジェクトの上でメリットにもデメリットにもなりうる。
0154NAME IS NULL
2009/04/11(土) 14:31:19ID:???PHPでのDB接続の場合は、取得結果を連想配列に格納となっているようだ。
ただし、接続先のDBが限定されてるようだけど。
ADO.NETのDataTableは連想配列ではなかったり、それに簡単に格納出来なかったり
する部分が不便だけど、PHPみたいに接続DBの種類を限定はしていないところは
良いところだな。
mysql_fetch_array
http://bg.pi-ppi.com/page/n01/000152.html
0155NAME IS NULL
2009/04/11(土) 15:51:23ID:???.netもnhibernateとかs2dao.netとかあるだろ
javaの移植だけど
0156NAME IS NULL
2009/04/11(土) 16:48:11ID:???すまん。今まで移植がされてたなんて全く知らなかった。
だが、一つ勉強になった。
http://www.atmarkit.co.jp/fdotnet/special/ormap01/ormap01_01.html
0157NAME IS NULL
2009/04/11(土) 21:01:51ID:???0158NAME IS NULL
2009/04/11(土) 21:27:38ID:???0159NAME IS NULL
2009/04/12(日) 13:36:26ID:UP5C1RP7#まだ使ったこt無いんだが
0160NAME IS NULL
2009/04/12(日) 16:39:24ID:UP5C1RP7DBI::DBDだとみんな、連想配列だと思うのだが
0161NAME IS NULL
2009/04/13(月) 07:36:37ID:???現状では、ADO.NETでDB接続し、テーブルデータ取得時に、
一発で連想配列に格納する事って出来ないよね?
DataTableは連想配列じゃないし。
0162NAME IS NULL
2009/04/13(月) 11:20:08ID:???0163NAME IS NULL
2009/04/14(火) 14:37:12ID:???なのかなぁ?複数テーブルをJOINした場合の更新のサポートとか、
ちょっと複雑なクエリを使って集計する必要がある場合、簡単に
抽出が出来るとかそういうのがあってもよさそうに思うんだけど。
0164NAME IS NULL
2009/04/14(火) 15:34:17ID:BZsP47Lx複数テーブルのテーブルロックになっていいの?
#行ロックじゃなくって
>>ちょっと複雑なクエリを使って集計する必要がある場合
複雑なクエリで集計->複雑な条件で抽出&集計 になると思うのだが?
0165NAME IS NULL
2009/04/14(火) 16:32:38ID:???0166NAME IS NULL
2009/04/15(水) 21:19:49ID:???SQL文を工夫する以外の方法である?
0167NAME IS NULL
2009/04/23(木) 18:02:43ID:???0168NAME IS NULL
2009/04/24(金) 02:27:01ID:???想像を超えるほどに遅くかなり間がかかってしまいます。
DbProviderFactory objProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
using (DbConnection objConnection = objProviderFactory.CreateConnection())
{
objConnection.ConnectionString = "Data Source=localhost;Initial Catalog=testdb;Integrated Security=SSPI";
objConnection.Open();
using (DbTransaction objTransaction = objConnection.BeginTransaction())
{
for (int i = 0; i < 100000; i++)
{
using (DbCommand objCommand = objProviderFactory.CreateCommand())
{
objCommand.Transaction = objTransaction;
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO testtable (filename) VALUES(@val);";
DbParameter param1 = objCommand.CreateParameter();
param1.ParameterName = "@val";
param1.DbType = System.Data.DbType.String;
param1.Value = System.IO.Path.GetRandomFileName();
objCommand.Parameters.Add(param1);
objCommand.ExecuteNonQuery();
}
}
objTransaction.Commit();
}
}
なんとなく、Transactionの使い方を間違えてる気がするのですが。
開発は.NET 3.5 & SQL Server 2008 Expressで行っています。
0169NAME IS NULL
2009/04/24(金) 03:12:39ID:???10万回もパラメータ生成してりゃ遅くもなるわな
0170NAME IS NULL
2009/04/24(金) 03:22:08ID:???0171NAME IS NULL
2009/04/24(金) 06:44:30ID:???0172NAME IS NULL
2009/04/24(金) 08:04:39ID:???0173NAME IS NULL
2009/04/24(金) 08:54:54ID:???0174NAME IS NULL
2009/04/24(金) 12:08:16ID:???0175NAME IS NULL
2009/04/24(金) 18:20:53ID:???0176NAME IS NULL
2009/04/24(金) 18:40:21ID:???CreateCommandとパラメータ生成をforの外にだせ
つか、本気で言われないとわからないならプログラマ向いてないぞ
まあ、それでも遅いってなら、バルクインサート検討しないと無理かも知れん
0177NAME IS NULL
2009/04/24(金) 21:55:12ID:???まじで?じゃあコード書いてみなよ
できるもんならね!
ふふん
/ ̄ ̄ ヽ, / ̄ ̄ ヽ, / ̄ ̄ ヽ,
/ ', / ', / ',
{0} /¨`ヽ {0} {0} /¨`ヽ {0} {0} /¨`ヽ {0}
l トェェェイ ', l トェェェイ ', l トェェェイ ',
ノ `ー'′ ', ノ `ー'′ ', ノ `ー'′ ',
/,, -ー 、 , -‐ 、 /,, -ー 、 , -‐ 、 /,, -ー 、 , -‐ 、
( , -‐ '" ( , -‐ '" ( , -‐ '" )))
`;ー" ` ー- -ー;'" `;ー" ` ー- -ー;'" `;ー" ` ー- -ー;'"
l l l l l l
0178NAME IS NULL
2009/04/25(土) 06:43:46ID:???>>176 実験した VS2008+SQL2000
ベンチの公開は禁止されてたような気がするので具体的な数字は伏せる
処理時間で96%ぐらいになった。つまり4%ぐらい高速化された
思ったより差が出なかった
>>168は想像以上に遅かったといっているが、
俺の想像以上に早かったw
パラメタにサイズ設定して、objCommand.Prepare追加したらさらに数%早くはなったが
10秒程度のオーダーで数%だから、誤差に近いかもしれんな
0179NAME IS NULL
2009/04/25(土) 14:13:50ID:???0180NAME IS NULL
2009/04/25(土) 16:41:55ID:???せっかく2008使ってるんだし
ストアドとSQL CLR使ってみれば?
かなり速くなると思うけど
0181178
2009/04/25(土) 17:26:46ID:???>>179
少なくとも確実に数%早くなってるぞ。間違ってるとはいえない
つか役に立たんレスとか煽りとかいらない
>>180
10万回CreateCommandした場合とPrepareした場合とで数%の違いなんで、
ストアドにしても大差はないと予想した。SQLの解析時間は数%ってことだから
処理時間のほとんどはinsert文の実行時間なんじゃないかな
うちの環境ではSQL CLRは試せないが、バルクでインサートしないと
結果は大差ないと予想。だれかモノ好きが実験してくれw
まあ、ADO.NETは結構速いと俺は思ったぞ。SQL Serverに限ればかも知れんが
0182NAME IS NULL
2009/04/25(土) 17:27:01ID:???ストアドとはストアードプロシージャーのことでしょうか?
あまりよくわからないので、多少は使い慣れたC#から、とおもったのですが。
お騒がせしましたが、たかが10万件ですし、手入力で解決しました。
0183NAME IS NULL
2009/04/25(土) 17:29:43ID:???つか役に立たんレスとか煽りとかいらないからまじで
0184NAME IS NULL
2009/05/11(月) 15:01:19ID:???0185NAME IS NULL
2009/05/11(月) 15:04:36ID:???0186NAME IS NULL
2009/05/11(月) 19:33:23ID:???0187NAME IS NULL
2009/05/16(土) 00:18:47ID:???表示専用にしたDataGridViewに表示中のDataTableに対して行を追加するのに、BindingSource.AddNew()とEndEdit()で
追加して、ソートしてあると追加行は自動的にしかるべき位置に並べ替えられますが、
その後、追加した行が選択されず、その1行下が選択されてしまいます。
ちなみに、最下行に新規行が追加されるときだけは新規行が選択されます。
BindingSource.Position自体が1行下を指す値になっていました。
PositionChangedイベントを見てみると、EndEdit()後に一度Positionが
新規行の値になり、直後に1行下に変わって、都合イベントが2回起こります。
DataTableを型指定しない最小限のもので試したり、DataGridやDataViewを
使っても同じ現象が出ます。どうも、CurrencyManagerからして
そのような動きをしているようです。
選択行が追加前と変化しないとかならともかく、微妙に1行ずれとかだと
困ってしまいます。なんとかならんでしょうか。
0188NAME IS NULL
2009/05/16(土) 17:28:43ID:???俺はこれまで、そういった問題に直面したことはないが、
そこまで解決がうまく出来ない場合は、追加する前にあらかじめ
主キーとなるデータをローカル変数に保存しておいて、
あとで選択し直すという方法をとってみたらどうかなと
思うが、そのあたりは試してみたのかな?
0189NAME IS NULL
2009/05/28(木) 08:28:16ID:9j4YcJlyデータセットのデザイナ、便利で助かっているのですが、
実際のテーブルの定義を変更した時にどうやってデータセットのほうに
反映させればいいのかわかりません。
テーブルの列の追加や削除、NOT NULL の変更などが発生した際
皆さんはどのように対応していますか?
0190NAME IS NULL
2009/05/28(木) 11:21:50ID:gxKAwuxSデータセット作り直すしかないんじゃないかと>定義ファイル作って差替え
#それが嫌で使ってない
0191NAME IS NULL
2009/05/28(木) 14:31:29ID:???使わないとイライラとすることが多いように思う。
コーディングが楽になるとか、いくつかメリットはあるけれど。
だから、かなり単純なテーブルのデータを読み込む場合など
の時にしか使わないな。俺は。
0192NAME IS NULL
2009/05/29(金) 12:07:49ID:j7MbTSD8たとえばテーブルに新たに列を追加した場合、
TableAdapter構成ウィザードのクエリビルダで
追加した列を選択して再構成すれば大丈夫みたい。
0193NAME IS NULL
2009/05/29(金) 23:56:43ID:UxJIKZRFストアド苦手っていうプログラマでろくなヤツ見たことないな。
そういうやつに限ってメンテしづらいし、
後々、致命的な性能問題起こすプログラム書きやがる。
0194NAME IS NULL
2009/05/30(土) 08:53:43ID:evhQeNCf超亀だけど、あの本読まずに何を読む って気がするんだけど
VB+C#対応だから、お買い得だと思う
0195NAME IS NULL
2009/06/02(火) 09:14:47ID:???いけない。その道を通らずに習得するのは無理でしょ。
最初からコーダー目指すのならば、「ここはこう書くんだ」みたいな
形式の適当な研修を受けるだけで十分かもしれないが。
0196NAME IS NULL
2009/06/04(木) 06:59:44ID:w05KK/Vpまぁ まともなSQLかける奴も少ないけど
#最近 少しはましになったw
0197NAME IS NULL
2009/06/06(土) 15:26:45ID:???SQL文を自分で細かくかかなくても自動生成されるよっていう
のがあるけれど、俺はやはりSQL文を自分で書くスタイルの方が
いいな。このほうがパフォーマンスが大きく変わるわけでも
ないけれど、他の言語(javaやPHPなどADO.NETを使わない場合)
での開発も視野に入れると、ある程度似たようなコーディング
スタイルの方がいいと思うから。
0198NAME IS NULL
2009/06/08(月) 10:44:11ID:???MSDNライブラリの内容を書籍にしたような感じだから
紙じゃなくてもいいのなら MSDN ライブラリで十分かもしれん。
MSDNライブラリよりは解説が多い分わかりやすいかもしれんが。
0199NAME IS NULL
2009/06/10(水) 13:28:53ID:4wnEGzykMSDNライブラリを探しながら体系的に見ていく事が
初心者にできるか って事だと思うが
#最低限の知識がないまま、いきなりMSDNライブラリを読む
#というのは、自分的には時間がもったいないと思う
0200NAME IS NULL
2009/06/10(水) 20:06:05ID:???レポートウィザードで作れるピボットテーブルをベースに色々と追加したい要素があるんですが、どうやりゃ良いのかいまいちわからない。
一応、やりたいことは今年度のピボットテーブルに前年度の合計とか、前年度比とかの行とか列を追加することです。
0201NAME IS NULL
2009/06/13(土) 14:01:36ID:???例えば、VB5の開発経験がある人だとVB6の習得にかかる時間は・・・みたいな。
それだけの知識が無い場合は、技術評論社などの一般向け書籍を読み、
ADO.NETの公式文書を読み、MSDNという順序しかないと思う。
0202NAME IS NULL
2009/06/13(土) 14:05:15ID:???プログラマー板のVB.NETスレなどに行って相談してみると
いいかもしれない。
ここがスレ違いというわけではないが、情報量が違うから
0203NAME IS NULL
2009/06/13(土) 18:18:33ID:???そうですか。
とりあえずVB.NETの質問スレに行ってみます。
0204NAME IS NULL
2009/06/15(月) 09:11:39ID:???すまん
0205NAME IS NULL
2009/06/16(火) 19:19:15ID:???レポートデザイナ?でいろいろやるより
出来上がりの形までのストアドを作ったほうが楽かもね
0206NAME IS NULL
2009/06/16(火) 22:52:28ID:???ただ、前年比みたいなのを混ぜると通貨型と浮動小数点型が混在しちゃうんでどうにかならんかなとか思ったり。
まぁどっちも文字列型に変換してしまうのが手っ取り早いかな。
0207NAME IS NULL
2009/06/30(火) 04:51:55ID:???ADO.NETはおろかDB初心者です。
現在SQLServer(2005EE)のデータをC#(VS2008PE)にて操作しようと考えています。
SQLServerからアダプター経由でDatasetに読み込み
DataRows.add(hoge)
adapter.update
で追加更新までは出来るようになりました。
ですが、レコードの削除やセル単位の変更のデータベースへの更新が全く判りません。。。
エスパー様、どうか宜しくお願いいたします。
DataRow自体の中身を変更したり削除して
Updateを呼べば普通は何も考えなくても裏でやってくれる
0209NAME IS NULL
2009/06/30(火) 12:09:25ID:???それが出来ないんですよ・・・・・
Datasetやアダプターになにか設定が必要なのでしょうか?
追加更新はUPDATEであっけなく出来たのですが・・・
わたし勘違いしてますかね?
Datasetの中のDataRowを削除、変更してUPDATEしようとしているのですが・・・
対象のDataRowのstateが変わってないとか?
そうであれば、処理の仕方が間違っているんでしょう。
adapter.update前の中身を確認して見ては?
0211NAME IS NULL
2009/06/30(火) 12:54:55ID:???極意の本に載ってた方法でそれもやりましたが
だめでした・・・・。
なにか根本的におかしい事をやっている気がします。
どこか参考になるサイトをご存じないでしょうか?
ソース
0213NAME IS NULL
2009/06/30(火) 13:01:37ID:???ありがとうございます。
今日の夜でもいいですか?
よろしくお願いいたします。
0214213
2009/06/30(火) 19:10:57ID:wdq85xWU{
DataRow ddd =this.hOGEDataSet1.Tables[0].NewRow();
ddd["NCHAR10"]= "ssssss";
ddd["INT"] = 55;
this.hOGEDataSet1.Tables[0].Rows.Add(ddd);
this.tESTTableAdapter.Update(this.hOGEDataSet1.TEST);
}
private void button2_Click(object sender , EventArgs e)
{
DataRow ddd = this.hOGEDataSet1.Tables[0].Rows[this.hOGEDataSet1.Tables[0].Rows.Count - 1];
this.hOGEDataSet1.Tables[0].Rows.Remove(ddd);
this.tESTTableAdapter.Update(this.hOGEDataSet1.TEST);
}
private void button3_Click(object sender , EventArgs e)
{
this.hOGEDataSet1.Tables[0].Rows[6]["NCHAR10"] = "huga";
this.tESTTableAdapter.Update(this.hOGEDataSet1.TEST);
}
ボタン1⇒成功
ボタン2,3⇒失敗
となります。
宜しくお願いします
0215213
2009/06/30(火) 19:12:42ID:wdq85xWU例外内容です。
TableAdapterのUpdateCommandが設定されていないか
そこに設定されているSQLがおかしいって事でしょ
DeleteCommandの方も同様
0217NAME IS NULL
2009/07/01(水) 10:30:13ID:???おはようございます。
>TableAdapterのUpdateCommandが設定
すみませんが、デザイナ上で行う方法を教えては頂けないでしょうか?
私なりに例外メッセージ等で調べたのですが、全然判りません・・・
よろしくお願い致します。
0218NAME IS NULL
2009/07/03(金) 20:00:18ID:???じゃ、プロジェクトファイルをうpってみたらどうかな?
デザイナ上ではすべてが出来るわけでもないしさ
0219NAME IS NULL
2009/07/04(土) 11:30:48ID:???こういうことをやる前に、SQL文について勉強して
おいた方がいいと思う。
SQLがある程度書けるくらいになっておかないと、
概念の理解まで至らないし、これから先もあらゆる
ことでつまづきまくると思う。
0220NAME IS NULL
2009/07/21(火) 13:44:37ID:???習得しなければならないのが欠点だな。
ADO.NETの場合、欠点のみが表に出ている感がするのだが・・・
0221NAME IS NULL
2009/07/22(水) 08:13:16ID:???0222NAME IS NULL
2009/07/24(金) 11:44:07ID:dt3OdEIgSqlServer2005+DataSet&TableAdapterで、主キーが設定された行の交換をしたいのですが
dataSet1.EnforceConstraints = false;
DataRow row1 = dataSet1.Table1.Rows[0];
DataRow row2 = dataSet1.Table1.Rows[1];
row1["seq"]=1;
row2["seq"]=0;
dataSet1.EnforceConstraints = true;
Table1TableAdapter.Update(dataSet1.Table1); ←ここで一意違反
Table1にはID+seqの複合主キーが設定してあります
デバッガでRowsの中身を確認してみましたが、キーの重複はありませんでした
それなのに何故一意違反が出るのか不思議です
Table1.Copy()で一旦退避して書き換え、Rows.Clear()→Rows.Add()してもやはりエラーが出てしまいます
一体何が原因なのでしょうか?
0223NAME IS NULL
2009/07/24(金) 18:30:56ID:???基本的には1行ずつupdateのSQL投げるはずだから、
Rows[0]のupdate文実行しようとしてRows[1]の元データとダブってるんじゃね
0224NAME IS NULL
2009/07/24(金) 20:49:19ID:???del/insにするか主キー「以外」のカラムを入れ替えるか。
0225NAME IS NULL
2009/07/25(土) 11:14:02ID:ntHeY4dE書いたんだけど1万近いデータをforで回しながら入れていくとめちゃ時間かかります
なにか高速化する方法はないでしょうか?
0226NAME IS NULL
2009/07/25(土) 11:29:02ID:???そのフィールドを入替えする必要性があるのであれば、それとは
別に主キーフィールドを準備するべきだ。
0227NAME IS NULL
2009/07/25(土) 11:30:53ID:???いちいちINSTALLしてるから時間がかかるんじゃないの?
0228NAME IS NULL
2009/07/25(土) 11:35:26ID:???あなたの言う「めちゃ」の基準がどんなものなのかというものがあるし、
極端な話、コネクションのopen/closeをforの中に入れてしまっている
可能性などもあるので、具体的にどういうプログラムを書いているのか、
現状は何秒かかっているのか、何秒くらいにしたいのか、などを
書かないと話はすすまないんじゃないかな。
0229NAME IS NULL
2009/07/25(土) 12:56:30ID:???1000件ごとにコミット、とかで大幅に速くなる可能性はある。
あとはselect/insert1発で出来るような話ならそうするとか
0230NAME IS NULL
2009/07/25(土) 13:03:06ID:QzAHKE4L0231NAME IS NULL
2009/07/26(日) 02:30:21ID:???1行ずつコミットと複数行コミットともひとつあったな。
0232NAME IS NULL
2009/07/26(日) 03:32:51ID:???http://blogs.wankuma.com/ognac/archive/2009/06/14/175205.aspx
0233NAME IS NULL
2009/07/28(火) 15:27:24ID:6RYCaFK/(データは8.012345678901234567890123456 .netのdecimal型の有効桁数に収まる)
data provider for sqlserver ×
data provider for ODBC ○
0234NAME IS NULL
2009/08/18(火) 15:31:48ID:???テーブルなどを生成するsqlや実際のMDFを生成することは出来ます。
でも、初期データのレコードをそれに入れるにはどうしたら良いのでしょうか?
単体テスト用の「データ生成計画」を使用すれば、
ランダムな値でレコードを埋めることは可能ですが、
任意の値で作った数レコードを設定する方法はあるのでしょうか?
管理用テーブルに初期レコードを入れたい状況は結構あると思うのですが。
0235NAME IS NULL
2009/08/18(火) 15:36:41ID:???0236NAME IS NULL
2009/08/18(火) 15:40:22ID:???何か美しい方法があるのかなと。
仮にカラム名とかスキーマビューから変更したとき、
初期データスクリプトも自動的にリファクタされたいじゃないですか。
0237NAME IS NULL
2009/08/18(火) 19:17:21ID:???開発初期で余裕がある時の息抜きというか腕ならしというかで。
たまに「今後もずっと使える」とかいうのを作るヤツもいるが、
設定項目が多くなりすぎて自前で書いた方が速かったり、
ついでの要望の多さにヘソ曲げて放置になったりしてる。
0238234
2009/08/19(水) 09:09:36ID:???プロジェクトの中のScripts\Post-Deploymentディレクトリ辺りに
初期値をInsertするsqlファイルをいくつでも置いておき、
同じディレクトリのScript.PostDeployment.sqlが最初に実行されるので、
:r .\DefaultValuesUsers.sql
のような感じで、それらを呼び出すように書いておくようです。
と、Script.PostDeployment.sqlの最初のコメントにほんの少し書かれてます。
データベースプロジェクトで「配置」を実行したときに何回でも実行されるので、
複数回挿入されることが無いように、
IF NOT EXISTS(SELECT * FROM User WHERE UserID = @User1ID)
のような感じでチェックを入れとく必要があります。
0239名無しさん@そうだ選挙に行こう
2009/08/30(日) 18:59:07ID:fgXfO5+Tにて
image型は将来削除される予定である、との記述があるため
DDL の image の部分を varbinary(max) に置き換えたのですが
ADO.NET での
new SqlParameter("IMAGE", SqlDbType.Image);
のような記述を
SqlDbType.VarBinary で max 指定することって出来るのでしょうか?
System.Data.SqlTypes.SqlBinary は他の型と違って
MaxValue のフィールドが存在しなかったです。。。
0240NAME IS NULL
2009/09/08(火) 18:28:11ID:???現在OracleのデータベースをC#から弄ろうとしているのですが
Oracleが9iだった場合ODP.netも9iじゃないといけないのでしょうか?(11gじゃだめなんですかね)
すれ違いかもしれませんが、どなたか宜しくお願いいたします。
0241NAME IS NULL
2009/09/08(火) 22:28:24ID:???0242NAME IS NULL
2009/09/08(火) 22:47:03ID:???http://www.oracle.com/technology/global/jp/software/tech/windows/odtvnet/sysreq/111062.html
接続可能なOracle Database
Oracle9i Database Release 2 以降
0243NAME IS NULL
2009/09/09(水) 18:25:43ID:???>>242
ご親切にありがとうございました。返事が遅れてすみません。
やはりOLEDBで行うことにしました。
ODP.netで繋ぐメリットって具体的になんなんですかね?
0244NAME IS NULL
2009/09/09(水) 20:01:25ID:???0245NAME IS NULL
2009/09/09(水) 21:00:32ID:???どっちでもいいならODPのがいいと思うけど・・・
0246NAME IS NULL
2009/09/09(水) 21:32:14ID:???Oracle => OLEDB => .NET Framework Data Provider for OLEDB
Oracle => Oracle Data Provider for .NET
専用ドライバの方がダイレクトに接続できる分効率的
0247NAME IS NULL
2009/09/12(土) 20:59:53ID:10ipJbo0cmd.Parameters.AddWithValue("@PARAMS", new int[]{1,2,3});
こんなのがすごくやりたいです・・・。
0248NAME IS NULL
2009/09/12(土) 21:20:07ID:???SQL Server 2008からテーブル値パラメータってのがあるから、それ使えば?
0249NAME IS NULL
2009/09/13(日) 11:54:45ID:CN3ToSfVストアドですか・・・。でも接続先はmdb(2000)。。。(死)
0250NAME IS NULL
2009/09/13(日) 12:19:48ID:???0251NAME IS NULL
2009/09/13(日) 17:01:20ID:???0252NAME IS NULL
2009/09/13(日) 20:54:58ID:???対象をちゃんと書かない>>247が悪い
0253NAME IS NULL
2009/09/19(土) 06:35:52ID:???-----------------------------------------------------
深夜のメンテナンス作業で眠くて眠くて、ユーザーの伝票明細テーブルを間違ってTRUNCATEした。
ROLLBACKも効かない。
あせってArcserve開いてテーブルを戻そうとする・・・ログウィンドウを見ると、
バックアップバッチは数ヶ月前から停止したままだった。
頭が真っ白になった。
IDCを出て深夜の自席に戻って、机の中の大事なものをかきあつめてかばんに詰めた。
社員証を課長の机の上に置き、会社を出て、アパートに戻る。
保険証、パスポート、前の年に死んだ愛犬の写真を持ち、始発にあわせて家を出る。
携帯が鳴り始める。何度も何度も何度も。空港につくころには着信が100回を超えた。
電池を抜き、俺は北海道行きの飛行機に乗った。
逃げるなら、なんとなく北、というイメージがあった。
それから3年無為な生活をし、ほとぼりが冷めたころ、北海道の小さな
ソフトウェア開発会社に就職した。
経験を買われて、すぐにプロマネになる。
そして、孫請けながら大きなプロジェクトに参加することになり、
キックオフミーティングのために東京へ。
発注元とともに汐留で会議に参加する。
・・・会議室には、俺が逃げ出した会社の部長と、課長がいた・・・
ふたりとも、会議のあいだずっと、顔を真っ赤にして俺を睨んでいた・・・
こみあげてくる胃痛と嘔吐感に耐え、会議が終わると同時に俺は会議室から逃げ出した・・・
それが、先週の金曜日のこと・・・死にたい・・・
0254NAME IS NULL
2009/09/20(日) 11:53:01ID:???使ってみたけどなんかいまいちじゃ〜
0255NAME IS NULL
2009/09/20(日) 20:43:01ID:???俺使ってた
型付DataRowは結構便利だった
LINQ出たから過去形
0256NAME IS NULL
2009/09/20(日) 23:41:24ID:???使ってる。
0257NAME IS NULL
2009/09/21(月) 10:17:43ID:???やはり、ExecuteReader、ExecuteNonQuery が最強ですな
0258NAME IS NULL
2009/09/21(月) 11:06:02ID:???使わなかった。なるべく統一性のある方法でやりたいという考え
でやっているので、俺も>>257のようなやり方でやっている。
LINQは、過去に使いこなされたものを真似して作ったという系統では
なく、新しいことをやろうという系統のことなので、言語仕様や
書き方はしばらくの間は変わりそうな予感がするので、手をつけないでいる。
0259NAME IS NULL
2009/09/21(月) 11:10:21ID:???やるのもありかと。
0260NAME IS NULL
2009/09/21(月) 11:13:43ID:???0261NAME IS NULL
2009/09/21(月) 13:39:27ID:???キャストが要らなくなるならそれでもいいがね
0262NAME IS NULL
2009/09/21(月) 14:51:02ID:???キャストはIDEが教えてくれるので無問題
0263NAME IS NULL
2009/09/21(月) 18:10:27ID:???だが列名のスペルミスまでは指摘してくれない
0264NAME IS NULL
2009/09/21(月) 21:10:10ID:???テストくらいするだろ〜
TableAdapterでもプロパティ名間違えると駄目だし。
0265NAME IS NULL
2009/09/21(月) 23:42:51ID:???0266NAME IS NULL
2009/09/23(水) 12:41:30ID:4tX5mSUzLOOPでSQL吐く代わりに、オンメモリでアクセスしたくなるときは便利やん
0267NAME IS NULL
2009/09/23(水) 14:23:27ID:???ExecuteNonQuery?
0268NAME IS NULL
2009/09/24(木) 11:35:19ID:gNkdYfWL0269NAME IS NULL
2009/10/06(火) 20:27:30ID:???Update とか Merge を投げるクライアントアプリを作ったのですが、
現状トランザクションではなく、単にSQL文を発行しているだけの状態です。
SQL文投げる前にテーブルロックをかける必要はあるのでしょうか?
そもそも、トランザクションを使わないDB操作にテーブルロックができるのか
疑問なのですが。
0270NAME IS NULL
2009/10/06(火) 20:46:13ID:???ロックにもいろいろある
楽観的ロックで検索してみろ
0271NAME IS NULL
2009/10/06(火) 22:36:30ID:???つまり、ロックなど一切しないw
0272NAME IS NULL
2009/10/07(水) 20:15:21ID:???だから、馬鹿のゴミレスは不要だって。
0273NAME IS NULL
2009/10/09(金) 01:01:52ID:???まず対象のDBMSを特定しないと確実な話はできないんだが
1文のSQLは、その1文だけのトランザクションだと考えていい
テーブルロックをかける必要があるかどうかは、SQLが1文かどうかにかかわらない
その処理でテーブルロックが必要ならかければいい
まあ俺にはSQL1文で明示的にテーブルロックする必要がある処理は思いつかないが
0274NAME IS NULL
2009/10/11(日) 11:39:23ID:???スレ違いだったらすみません。
今度、.net の環境で DB を扱うプログラムを書きます。
基本的にはクライアント側か、クライアントと DB サーバの仲介をする部分を扱うことになります。
DB に関することは教科書レベルでは知っているつもりなのですが、
たとえば効率的な SQL の書き方とか、とにかく実戦レベルで気をつけなければならないことなどは
経験がないためよくわかっていません。
こんな人間が読むのに最適な本をご存知でしたら、紹介をお願いできないでしょうか。
よろしくお願いします。
0275NAME IS NULL
2009/10/11(日) 13:15:44ID:???現場で使えるSQL
0276NAME IS NULL
2009/10/11(日) 20:23:28ID:???変更することはできるのでしょうか?
GridViewにDBを貼り付けて表示させるときに、SqlDataSourceをウィザードで定義
する方法はあるのですが、その設定をプログラムで動的に変更する方法は無いかと
調べているところです。
ご存知の方いましたら教えてください。
0277NAME IS NULL
2009/10/11(日) 22:15:46ID:???ありがとうございます。
助かります。
0278NAME IS NULL
2009/10/12(月) 01:13:40ID:???つPage_Load()
つか.aspxのソースみれ
0279NAME IS NULL
2009/10/12(月) 12:20:11ID:???0280NAME IS NULL
2009/10/19(月) 20:23:19ID:???>SqlDataSource の ConnectionString とか SelectCommand をプログラムで動的に
>変更することはできるのでしょうか?
できる。
>GridViewにDBを貼り付けて表示させるときに、SqlDataSourceをウィザードで定義
>する方法はあるのですが、その設定をプログラムで動的に変更する方法は無いかと
>調べているところです。
>ご存知の方いましたら教えてください。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.datasource%28VS.80%29.aspx
0281NAME IS NULL
2009/10/20(火) 00:47:31ID:???mysqlで、データソース→新しいデータソースの追加→データソースの種類を選択
→データベース→アプリケーションがデータベースへ接続に使用するデータ接続
ここで正確に入れても次のデータオブジェクトの選択で
「選択したデータベースが新しいか、オブジェクトを含んでいません」
になる。
サーバーエクスプローラーのデータ接続では、普通につなげて、中身も見える。
同じように設定しているのだけど、何で差がつくのだろう?
質問する場所違ってたら誘導ください。よろしくお願いいたします。
0282281
2009/10/20(火) 00:50:25ID:???を使って、サーバーエクスプローラーのをD&Dすれば普通には使える。
ただ、余計に手間がかかる理由が不明。
0283NAME IS NULL
2009/10/21(水) 03:55:41ID:???便利だけど動作が把握し切れん・・・
0284NAME IS NULL
2009/10/22(木) 21:48:37ID:???GridViewの質問だよ。DataGridViewじゃないよ。
0285NAME IS NULL
2009/10/26(月) 07:44:18ID:???便利機能のライブラリって、必ずそういう事がつきまとうよな。
で、結局は従来からの面倒だが非常に単純なやり方に落ち着いたりする・・・w
0286NAME IS NULL
2009/10/28(水) 22:26:08ID:???みたいなw
0287NAME IS NULL
2009/11/13(金) 21:46:16ID:???そのクライアントPCのスペック(メモリ)を超えている場合は、
ADO.NETの範疇でストップをかけることが出来たりするのでしょうか?
(DataTableのあるプロパティの値をこうしてたら途中までで自動で
止めるなどの機能はあるのでしょうか)
それはVB.NETやOSの範疇だったりするのかな?
0288NAME IS NULL
2009/11/13(金) 21:56:34ID:???あらかじめデータが巨大になることが分かっているなら
select に where で条件を付けることを必須にするとか、アプリ側の
対処になるような気がする
0289NAME IS NULL
2009/11/13(金) 22:07:12ID:???レスありがとうございます。
テーブルの操作が複雑な場合、サーバやネットワークの負荷を抑える為に、
処理の途中で、一時保存という形でローカルPCにmdbファイルという形で
保存しておいて、それを処理していくというものを作ろうとしたのですが、
その場合、mdbファイルに保存されたテーブルを処理する過程の部分は、
なるべくデータを少なく読み取るように工夫をする事で対処出来ますが、
サーバのテーブルをローカルへコピーする過程の部分で、テーブルが
大きすぎる場合は大丈夫なのかなとか思ったのです。
主キーが無いテーブルの場合は、途中まで読み込んで、クリアして、
また続きからとかの処理は無理ですよね?
0290NAME IS NULL
2009/11/14(土) 19:37:45ID:???俺は使ったこと無いので詳細はわからんが
DataAatapterのFillに、
Fill(DataSet, String, IDataReader, Int32, Int32)
ってのがある
これが開始位置と最大行数指定できるらしい
これでなんとかなるんじゃないかな
0291NAME IS NULL
2009/11/14(土) 20:27:43ID:???ありがとうございます。早速詳細を調べてみます。
0292NAME IS NULL
2009/11/28(土) 06:51:59ID:???その場合だと、DataTableを使わずReaderでループまわして、
直接MDBへ書き込んだ方が効率よくない?
0293NAME IS NULL
2009/11/28(土) 07:57:30ID:???その手がありましたね。ADO.NET使いこなせてなかったので
そこまで頭が回っていませんでした。ありがとうございます。
0294NAME IS NULL
2009/12/03(木) 17:36:18ID:???データベースの接続及びSQL文発行を行う
DLLを作成しており、
接続には『SqlDataReader』を使用しています。
Transactionを指定しない場合に
排他制御がどのように行われているのか、がわかりません。
一切排他が行われないのでしょうか?
また、排他制御を実装する場合はどのようにすれば良いのでしょうか?
行いたい制御としては、
�@データ取得中(SELECT)にデータ更新を抑止する
�Aデータ更新中(INSERT/UPDATE/DELETE)にはデータの取得/更新を抑止する
です。
0295NAME IS NULL
2009/12/03(木) 20:09:42ID:???Transactionを明示的に指定しない場合、SQL Serverは自動コミット モードで動作する
自動コミット モードではステートメント単位でトランザクションが自動的に発行される
例)
insert
insert
は概念的には
begin tran
insert
commit tran
begin tran
insert
commit tran
と解釈される
よって、1つのSQL文の実行中に、まったく同時に他のSQL文を実行したからといって
それが行単位である限り、それぞれのSQL文は自動的に発行されたトランザクションで
保護されているため、同時に実行したことが原因でデータを破壊してしまうようなことはない
なお、SQL Server のデフォルトの分離レベルはREAD COMMITTEDなので
自動コミットでもREAD COMMITTEDが適用されるはず
http://support.microsoft.com/kb/198024/ja
http://technet.microsoft.com/ja-jp/library/ms173763.aspx
カーソルを使った場合の説明は以下
http://technet.microsoft.com/ja-jp/library/ms190211(SQL.90).aspx
ちなみにトランザクションが必要なのは、複数のSQLの結果をまとめてコミット/ロールバックしたい場合、
複数のINSERT/UPDATEの途中でSELECTされたら困る場合、あるいは性能を意識する場合など
その場合の記述方法はデータベースの入門書を読んで勉強してくれ
0296NAME IS NULL
2009/12/12(土) 04:31:41ID:kLyx5gG9SQL分でLIKE抽出するときなのですが、%っていうのは「なくても」or「何が何文字あっても」って感じですか?
ワイルドカード文字数を指定してLIKE抽出したい場合*を使うのでしょうか?
又、*は「とりあえず何らかの文字が1文字以上ある」なのでしょうか?
やりたいことは (0は何らかの数字/A,Bはアルファベットが入ります)
000A000
000B000
000A000B
000B000A
の中から4文字目にBがくるものだけ抽出したいのです。
LIKE %B% では000A000Bも拾ってしまいます。
この場合*B*でいいのでしょうか?
(正規表現も試しましたがかなり遅い感じを受けましたので出来れば避けたいです)
よろしくお願いいたします。
0297NAME IS NULL
2009/12/12(土) 08:34:37ID:???つ http://msdn.microsoft.com/ja-jp/library/ms179859(SQL.90).aspx
msdnぐらい読もうな。
0298NAME IS NULL
2009/12/12(土) 11:59:02ID:kLyx5gG9ありがとうございました!
一文字ワイルドカードとして_を使っては見たのですが
まったく意図する結果が得られなかったので*なのかな?と思っていました。
LIKEのターゲットがCHAR(8)なのでこれが原因みたいですね。
0299NAME IS NULL
2009/12/12(土) 20:57:00ID:???0300NAME IS NULL
2009/12/12(土) 22:59:47ID:???つーかSQLスレで聞け
0301NAME IS NULL
2009/12/12(土) 23:20:41ID:kLyx5gG9http://pc11.2ch.net/test/read.cgi/db/1234077152/
先のスレでも回答いただいたのですが、どうやら私の理解が不足している様でして
出来れば初心者にも判りやすく回答いただけないでしょうか。
質問の内容はこの通りです。
環境はVS2008pro C# SQLServer2005EEです。
SQL分でLIKE抽出するときなのですが、%っていうのは「なくても」or「何が何文字あっても」って感じですか?
ワイルドカード文字数を指定してLIKE抽出したい場合*を使うのでしょうか?
又、*は「とりあえず何らかの文字が1文字以上ある」なのでしょうか?
やりたいことは (0は何らかの数字/A,Bはアルファベットが入ります)
000A000
000B000
000A000B
000B000A
の中から4文字目にBがくるものだけ抽出したいのです。
LIKE %B% では000A000Bも拾ってしまいます。
この場合*B*でいいのでしょうか?
(正規表現も試しましたがかなり遅い感じを受けましたので出来れば避けたいです)
よろしくお願いいたします。
一文字ワイルドカードは_だと教えて頂きましたが、___B%ではまるで抽出できませんでした
0302NAME IS NULL
2009/12/12(土) 23:22:03ID:kLyx5gG90303NAME IS NULL
2010/01/11(月) 00:38:34ID:???0304NAME IS NULL
2010/01/12(火) 00:41:27ID:???補完的に使うと便利だけど完全にADO.NETを置き換えられるか、つーと色々微妙。
取得結果を1カラムずつループ、とか出来ないし。
0305NAME IS NULL
2010/01/12(火) 03:06:20ID:???他のORMと同じような長所と短所を持っている。
完全な代替にはならない。
0306NAME IS NULL
2010/01/25(月) 17:41:17ID:l/MgFzI4当方の環境ではLike演算子の挙動が1)SqlSeverManagementStudio と 2)ADO.NET(VS2008C#)で異なっているのですが、
原因が解らずはまっております。なんでこんな事がおきるのでしょうか・・・
<<やりたいこと>>
XXXA0001のようなデータを抽出したい
select max(xxxx) from xxxxx
where cd like 'XXX[AB][0-9][0-9][0-9][0-9]%'
<<現象>>
XXXA0001とか 1)ではヒットするのだが、 2)ではヒットしない
<<試行錯誤結果>>
2)では [0-9]の数が1つまでなら、なぜかヒットする
×where cd like 'XXX[AB][0-9][0-9][0-9][0-9]%'
×where cd like 'XXX[AB][0-9][0-9]01%'
×where cd like 'XXX[AB][0-9]0[0-9]1%'
○where cd like 'XXX[AB][0-9]001%'
○where cd like 'XXX[AB]0[0-9]01%'
○where cd like 'XXX[AB]00[0-9]1%'
○where cd like 'XXX[AB]000[0-9]%'
0307NAME IS NULL
2010/01/25(月) 22:28:11ID:???System.Data.SqlClient.qlCommandでは2)は1)と同じ動作になる。
前提条件や再現するソースくらい出しなよ。
0308NAME IS NULL
2010/01/25(月) 23:24:47ID:???0309NAME IS NULL
2010/01/27(水) 07:39:54ID:???0310306
2010/02/01(月) 12:22:20ID:1OwJFp6Oレス頂き有り難う御座います。
また、中途半端な情報しか出せずに申し訳ありません。
2)の実行環境ですが、プロジェクトにデータセット(XSDファイル)を追加し、
同デザイナ上でクエリ追加()、SQLは306に記述されている構文そのまま(Scalar)
になります。
尚、接続先はSqlServer2008Expressになります。
接続文字列は
Data Source=XXXXXX\SQLEXPRESS;Initial Catalog=XXXXXXXXX;Persist Security Info=True;User ID=xxxx,Password=xxxx
になります。
自分自身DBは1年に数回いじる程度のスキルしか持ち合わせていないため、
何か間違いを犯しているような気はしているのですが、それが特定出来ていないのが現状です。
>>309
パラメータ文字列長に上限値が存在するということでしょうか?
0311NAME IS NULL
2010/02/01(月) 23:48:53ID:???0312NAME IS NULL
2010/02/02(火) 08:14:03ID:???話はそれからだ
0313306
2010/02/02(火) 18:10:41ID:QBgQPh1C306で御座います。原因がわかりました。
結論から言えば、309様の神のお告げのとおりで御座いました。
テーブルのフィールドの型がchar(16)で定義されているため、
デザイナでコード生成をすると対応するテーブルアダプタ\コマンド\パラメータの型も
char(16)として扱ってしまい、結果として、意図したパラメータが入力されなくなっておりました。
その為、like演算子を用いるパラメータクラスのプロパティ(ProvideType)を
Varchar型に変更することで解決することが確認できました。
>>311さま
実行されたSqlをトレースするソフトがあるなんて知りませんでしたw
同ツールを用いることで、解決にこぎつけました。
>>その他の皆様
私自身DBをよくわかっていないため、的確な情報が出せずに、申し訳ありません。
質問に反応して頂き有り難う御座いました。助かりました!!
0314NAME IS NULL
2010/02/02(火) 21:43:55ID:???0315NAME IS NULL
2010/02/20(土) 16:19:47ID:???連載:VB研公開ゼミ議事録
第7回 ADO.NET開発初心者の疑問、解決します!
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_07/opensemi_07_01.html
0316NAME IS NULL
2010/03/13(土) 16:18:45ID:???insertでなぜおきるのかわかりません
0317NAME IS NULL
2010/03/13(土) 16:32:42ID:???つか、それほんとにデッドロックか?
0318NAME IS NULL
2010/03/13(土) 19:51:48ID:???カーディナリティの低い索引で広範囲のロックがかかりやすい。
0319age
2010/03/14(日) 23:41:23ID:VnAk1aHD教えてエロい人
0320NAME IS NULL
2010/03/25(木) 23:40:52ID:???君を困らせるため
0321NAME IS NULL
2010/03/28(日) 16:44:06ID:WjFJHJzmこのアドに
メールしてくれ
0322NAME IS NULL
2010/04/30(金) 07:08:31ID:???0323NAME IS NULL
2010/05/03(月) 02:09:30ID:ZRam9Y6CデータテーブルのRowStateとか更新中に取得した自動採番値を更新前の状態に戻す処理はどうしてますか?
AcceptChangesDuringUpdateをfalseにしてもRowStateが更新されちゃったり(MySqlConnecter.net)
ロールバック時のdatatableのロールバック処理に試行錯誤中です・・・
0324NAME IS NULL
2010/05/05(水) 17:33:29ID:???もう少し状況を詳しくお願いします。
0325323
2010/05/05(水) 18:29:45ID:8TZZxJWs環境はC#2005で、MySqlConnector/Netを使用しています。
処理は以下です。
AcceptChangesDuringUpdateはfalse //Update時にAcceptChangesが実行されないはず
try
{
トランザクション開始
mysqldataadapter.Update(datatable) ← RowUpdatedイベントで自動採番やタイムスタンプの値取得
コミット
datatable.AcceptChanges();
}
catch (sqlexception)
{
ロールバック ← このときにデータテーブルの値をUpdate前の状態に戻したい
}
AcceptChanges()していないのにRowStateが更新されてしまう事と、
Updateが成功したDataRowのタイムスタンプの値をUpdate前の値に戻す処理の実装
をどうすれば良いのかで悩んでいます。
0326NAME IS NULL
2010/05/06(木) 06:00:48ID:???0327NAME IS NULL
2010/05/18(火) 00:17:05ID:???con.Open();
try {
var trans = connection.BeginTrans();
adapter.transaction = trans;
adapter.Fill(table);
trans.Commit();
} carch {
con.Rollback();
}
con.Close();
0328NAME IS NULL
2010/05/30(日) 18:32:35ID:???検索中ですみたいなメッセージを出したいけど、
マルチスレッドにするしかないのかな。難しそうだな
0329NAME IS NULL
2010/06/02(水) 23:05:39ID:???0330NAME IS NULL
2010/06/04(金) 03:01:51ID:???砂時計のままになるんですね、、、
0331NAME IS NULL
2010/06/07(月) 02:24:32ID:???BeginInvokeでも使っとれ
0332NAME IS NULL
2010/08/06(金) 18:19:36ID:???ADO.NETってどう使えばいいのかサッパリわからん。
どうすれば一番楽にアプリを作れるの?
なんか1冊いい本教えて。
作りたいのはデスクトップアプリでよくある業務系システム。
0333NAME IS NULL
2010/08/21(土) 14:07:37ID:???だったら、GUI(デザイナーなど)上でオブジェクトを配置しない方法を使った方が良いんでね?
他のプログラミング言語とかで、DB接続やるのになるべく近い方法にすれば、イメージもしやすい。
GUI(デザイナー)やウィザードは、それらの労力を省力化する為の便利機能なのだから。
俺が使っていた書籍は、
Visual Basic 2005による [実践]データベースプログラミング
谷尻 かおり (著)
だけど、公式図書は手元においていた方がいいと思うよ。結構な値段するけど。
0334NAME IS NULL
2010/09/03(金) 15:36:21ID:9BFROsrVVisual Basic 2005による [実践]データベースプログラミング
かなり後悔した1冊だったわ・・・
0335NAME IS NULL
2010/09/11(土) 12:54:30ID:UkiOG8lQ具体的にどこが?
俺はこの一つ前のバージョンの書籍を買ったが、
説明がウィザードのオンパレードで終わっていて、
後悔している。
0336NAME IS NULL
2010/09/14(火) 07:14:15ID:???コレを基礎に複雑なフォームとか作れるようになった 内容はゴク初歩的だけどな
0337NAME IS NULL
2010/09/17(金) 16:03:08ID:???その間、フォームが応答なし状態になってしまいます。
ちゃんと処理は行われているので待っていれば復帰するのですが、
できればDoEventsみたいに処理を受け付けるようにしたいのです。
そのような方法はありますでしょうか?
0338NAME IS NULL
2010/09/17(金) 16:15:21ID:???0339NAME IS NULL
2010/09/17(金) 16:15:44ID:???0340NAME IS NULL
2010/09/22(水) 14:36:51ID:???現在、社員データテーブルの一覧をそのままDataGridViewに表示しています。
DataGridViewに年齢カラムを追加しています。
社員データテーブルの生年月日フィールドの値を用いて年齢を表示させたいと思っています。
現在は、DataGridViewと社員データテーブルをバインドし、
Form_Loadで、TableAdapetr.Fill(社員DataTable)を行ったあと、
DataGridViewの行数だけ For 〜 Next でループして1行ずつ年齢を計算して
DataGridViewのセルにセットしています。
効率が悪い感じがしているので、できれば社員DataTableを作成する時点で
自動的に年齢が代入された社員DataTableを作成するか、
もしくはバインドされたDataGridViewに値がセットされるときに自動で
年齢がセルに入るような感じにしたいのですが、わかりません。
ちなみに年齢の計算式は以下です。(インターネットで探してきました)
((Integer.Parse(今日yyyyMMdd) - Integer.Parse(生年月日yyyyMMdd)) / 10000).ToString("##0")
うまい方法を教えて頂ければと思います。
環境:VB.NETかC# DB:ACCESSかSQLServer
0341NAME IS NULL
2010/09/22(水) 15:50:08ID:???ACCESSでいろいろやっていたところSQL文の中にかなり関数を入れることが可能でした。
以下のSQL文で年齢を含んだデータテーブルを作成することができました。
有難う御座いました。
SELECT ID, 生年月日, Format((Format(Now(),'yyyymmdd') - Format(生年月日,'yyyymmdd')) / 10000, '#0') AS 年齢
FROM 社員テーブル
0342NAME IS NULL
2010/10/20(水) 20:08:24ID:???今、VB2010からADO接続でAccess2007のデータ管理するシステム作ってるんだけど、
Accessで添付ファイル型フィールドにJPEGかBMPのファイルを記録して、それをADOで抽出したいのです。
その時の抽出方法としてDatasetを使用するんですが、このDatasetからどうやって添付ファイル型のデータを抜き取ればいいんでしょう?
DataSet.Tables("テーブル名").Rows(0)("フィールド名")
この構文のあとに何かつけるとか??
0343NAME IS NULL
2010/11/22(月) 18:34:13ID:???かなり亀レスだけど、このスレは人が少ないから、
プログラム板のVB関連スレでも同じ質問をしてみると
いいと思う。
その結果をここで紹介してくれるとなおよろし。
0344NAME IS NULL
2010/11/23(火) 17:10:07ID:???ADO.NETに関する質問は、プログラム板のVB質問スレでも
丁寧な回答がつく事が多い。
0345NAME IS NULL
2010/11/23(火) 19:16:17ID:???0346NAME IS NULL
2010/11/23(火) 19:26:05ID:???http://support.microsoft.com/kb/309158/ja
0347NAME IS NULL
2010/11/27(土) 12:27:43ID:???データベースプログラミング全般スレ
http://hibari.2ch.net/test/read.cgi/tech/1097295557/l50
このスレッドも、DB関連話題という枠組みよりも、プログラムとして
どうなのかという話題にする意味合いで、板を移ったほうがいいかもね。
0348NAME IS NULL
2010/12/02(木) 23:45:51ID:???イメージとしては
Using ta as New myDataAdapters(DataSetName)
Dim dt as DataTable
ta.Tables(TableName).fill
dt.Rows(0)(TargetColumnName)="hoge"
ta.Update(dt)
End Using
こんな感じで
0349NAME IS NULL
2010/12/02(木) 23:48:04ID:???じゃなくて
ta.Tables(dt,TableName).fill
もしくは
dt=ta.Tables(TableName).GetData()
こうか
0350NAME IS NULL
2011/02/04(金) 13:23:01ID:???0351NAME IS NULL
2011/03/09(水) 08:20:57.40ID:???どう調べたらいいのかわからないので教えてください
ADO.NET+OLEDBでaccessに接続するときのSQL構文は
MDBファイルをAccessで開いて「クエリ」で入力するものと違いますよね
(例えばワイルドカードが*と%)
この構文は具体的には何の構文になるのでしょうか?
ADO.NET固有のものなのかOLEDB固有のものなのかもよくわからないし
詳細はどこに載っているのですか?
また、executeNonQuery等を実行する直前のsql文をDebug.printして
それをAccessのクエリで動かすと普通に動くのに
コード経由ではエラーになったりすることがあって困ってます
コード経由で実行されるのと同じ構文で
SQLの動作かチェック出来るようなツールが
Visual Studioとかに付属しているとデバッグしやすいのですが
そういうのはあったりしますか?
0352NAME IS NULL
2011/03/09(水) 19:58:25.17ID:???> MDBファイルをAccessで開いて「クエリ」で入力するものと違いますよね
何故そう思った
0353NAME IS NULL
2011/03/09(水) 20:02:36.36ID:???> コード経由ではエラーになったりすることがあって困ってます
エラーになったりしない。
そもそもSQLが悪いのか?
0354NAME IS NULL
2011/03/09(水) 20:16:32.50ID:???実際にMDBファイルをAccessで開いて
クエリ→SQLビューでコピペしてちゃんとINSERT文が動くからです。
ttp://msdn.microsoft.com/ja-jp/library/ms187442.aspx
ttp://msdn.microsoft.com/ja-jp/library/ms189086%28v=sql.90%29.aspx
この辺とかが該当するのかな、とも思ったのですが
後述するようにここは関係なくて、ANSI構文というのが該当するのかもしれません
そういう辺りの話は何を見れば載っているのかよくわからんです
>>353
今回エラーになっていた箇所は「Image」が
予約語になっていたのが原因で、[Image]とすることで回避出来ました
ただ、これは、Accessの予約語ではないです(使用しているバージョンは2002)
ttp://support.microsoft.com/kb/286335/ja
実際、MDBを開いてクエリ実行した場合は[]を付けずにちゃんと登録出来ます
プログラムからは、[]つきじゃないと動きません
もうちょっとググって辿りついたのがこれ(Imageが予約語に含まれている)。
ttp://support.microsoft.com/kb/248738/ja
そうだとするとOLEDBとかは関係なくて
JET&ANSI構文の話になるのかな?
0355NAME IS NULL
2011/03/09(水) 20:32:17.29ID:???ttp://en.w3support.net/index.php?db=so&id=719115
ADOはデフォルトでSQL92準拠の構文
AccessはデフォルトでSQL89準拠の構文+一部準拠してない(VBのワイルドカード)
特にAccess2000はSQL89しか対応していない
また、mdbの設定でモードを変更出来る
ということでした
0356NAME IS NULL
2011/05/20(金) 10:26:08.66ID:8jU7fHP3生成されるUpdateクエリのWHERE句は、
全列チェックではなく、SELECTで選択した列だけチェックされていますが、
これは、複数のユーザが同じクエリ(選択列)を実行した場合はOKだけど、
そうでない場合はNGじゃない。
0357NAME IS NULL
2011/06/20(月) 16:42:47.59ID:???0358NAME IS NULL
2011/06/20(月) 18:11:59.09ID:???ActiveRecordでinsert時のkey取得するのってどうやるの?
あと、QPEの接続パラメーター教えて
0359NAME IS NULL
2011/07/14(木) 19:09:35.92ID:???以下のテーブルをDataAdapterで更新します。
変更前のテーブル
ID DATA
1 晴れ
2 曇り
変更後のテーブル
ID DATA
2 晴れ
1 曇り
IDは主キーに設定してあります。
この場合一意制約違反のエラーが起こります。
DataAdapterを使った更新方法で回避する方法はありますか?
0360NAME IS NULL
2011/07/14(木) 22:48:45.40ID:???1 曇り
2 晴れ
UPDATEすればいいだろ
0361359
2011/07/15(金) 00:25:19.89ID:???回答ありがとうございます。
質問はテーブルを単純に書きましたがUPDATE以外にINSERTとDLEATEも同時にやりたいので、
DataAdapterを使用しています。
ID部分の入れ替え動作中に一意制約違反になってしまうので、どうにか回避出来る方法がないか探してます。
0362NAME IS NULL
2011/07/15(金) 07:54:05.68ID:???仮に ID の最大値が 99 なら、
100足して、100引いたら、どうだべ。
0363NAME IS NULL
2011/07/15(金) 13:15:58.50ID:???0364NAME IS NULL
2011/07/15(金) 14:36:36.64ID:???IDを書き換えてダブったらエラーになるのは当然で
DataAdapterでどうこうするような話じゃないと思うが
UPDATEするのやめて、変更行はDELETEしてINSERTするようにすれば?
0365NAME IS NULL
2011/07/15(金) 18:19:31.42ID:???DataRowに元テーブルの情報まで入っちまってるんで元情報を取っておくことが出来ない
やるとするとInsert用のRowを新規作成して元Rowからカラムを一つ一つコピーしていくアホ臭いことしないとならない
しょうがないので俺はカラム列挙してコピーするメソッド自作したよ
0366NAME IS NULL
2011/07/16(土) 22:15:46.61ID:???0367NAME IS NULL
2011/07/23(土) 12:48:32.26ID:ooK807YSどうして他の方法ではダメなのか、それを書かないとと思うのだが。
ExecuteNonQueryとか。
0368NAME IS NULL
2011/07/23(土) 16:43:22.93ID:???スキーマが度々変わってめんどい or カラム型チェックがなくなるのはヤダヤダ
あたりじゃないか
0369NAME IS NULL
2011/08/02(火) 23:29:38.05ID:???http://cdn1.publicphoto.xtube.com/photos/20110621/13/l76RjrQpn3yj.jpg
!!!【DANGER!!】【DANGER!!】【DANGER!!】!!!
0370NAME IS NULL
2011/08/10(水) 10:12:46.30ID:???アプリケーションを作ろうとしています。
下のようなSQLで取得できるデータが対象。
SELECT D.DataNo, D.Hizuke, D.CustomerID, C.CustomerName
FROM TableData D JOIN Customer C on D.CustomerID=C.CustomerID
各カラムはフォーム上のTextboxに連結。
CustomerIDのTextboxを入力すると、CustomerNameのTextboxの表示が書き換えられる。
というのをやりたいんですが。
Windows Form アプリケーションのプロジェクトを新規作成。
データソースを新規作成。
使いそうなSQL Server上のテーブルを選んで追加。
データセットデザイナで、追加-TableAdapter。TableAdapter構成ウィザードを起動
ウィザードに従い、上のようなSQLを貼り付け、完了。
データセットデザイナ上にこんなのができた。
DataTable1
DataTable1TableAdapter
Fill, GetData()
Form1をデザイナで開き、DataTable1をドラッグ&ドロップ。
データが表示されるところまではできた。
あとどうしたらいいんですか。
0371NAME IS NULL
2011/08/10(水) 13:44:23.26ID:???0372NAME IS NULL
2011/08/10(水) 16:35:14.36ID:???次。
0373NAME IS NULL
2011/08/10(水) 17:04:42.62ID:???回答者はお前だけじゃない。
答えられないからと”次”とかお前様主動でスレ進行させんな
0374NAME IS NULL
2011/08/10(水) 17:36:49.88ID:???0375NAME IS NULL
2011/08/23(火) 09:49:57.31ID:???Formオープン時にSelectして適当な変数に格納、TextBoxのチェンジイベントでその値を取得
って流れになると思う。
結局はTextBoxのチェンジイベントを使うんじゃないの?
0376NAME IS NULL
2011/09/03(土) 16:52:43.26ID:???0377NAME IS NULL
2011/09/19(月) 17:37:25.62ID:???それの為だけに新しくテーブル作ったりするものなの?
バインドの為にローカルでmdbファイル準備するとか。
0378NAME IS NULL
2011/09/20(火) 03:41:39.47ID:???0379NAME IS NULL
2011/09/20(火) 11:31:35.13ID:???0380NAME IS NULL
2011/09/20(火) 21:56:55.32ID:???非接続型になるから、メモリに読み込んでいて表示させても、
バインドしても処理内容は同じだったんだね。。。
0381NAME IS NULL
2011/11/26(土) 10:33:19.73ID:???後は要らんって感じなんだがな。
DataSetの有効活用方法ってあるのだろうか?型指定されたDataSetを使わない
場合には必要あるのかな?
0382NAME IS NULL
2011/11/26(土) 13:13:40.69ID:???0383NAME IS NULL
2011/11/27(日) 03:47:20.24ID:???複数のDataTableをぶち込んで受け渡し
非接続だからいちいちdtoクラスとか作らなくていい
0384NAME IS NULL
2011/11/27(日) 20:01:24.52ID:???なるほど。サンクス。
リレーション情報の活用ってしてますか?
俺はプログラム上で実現してるから、リレーションの
設定やらって基本しない。
開発時にエラーが出たりするのが逆に面倒だったりする。
0385NAME IS NULL
2011/12/01(木) 16:46:12.13ID:NE/R2Q2Kodbcを使わずに接続できるらしいんですが調べても全然分からないんです
0386NAME IS NULL
2011/12/02(金) 01:41:29.39ID:???ぐぐったらすぐ出てきたけど?
0387NAME IS NULL
2011/12/02(金) 01:41:55.70ID:???これな
http://www.connectionstrings.com/informix
0388NAME IS NULL
2011/12/02(金) 11:38:19.59ID:uq6jKSUZ●●.ConnectionString="Provider=Ifxoledbc;Data Source=データベース名@サーバー名;User ID=ユーザー名;Password=パスワード;"
でしてみたのですがエラー0x80040E21が出たので解決策を模索中です。
なにか根本的に間違ってるかもしれないです…
0389NAME IS NULL
2011/12/11(日) 12:23:56.82ID:55w2N/S/警察と自衛隊の武器は少頭劣一族が奪い、朝鮮に送ったらしい。知能障害以前の頭が悪い家族達。「工作員」の意味を知らない「工作員」家族。
■ このスレッドは過去ログ倉庫に格納されています