ADO.NETの質問・雑談スレ2

このエントリーをはてなブックマークに追加
1NAME IS NULL
ADO.NETに関する質問・雑談・評価 etc
何でもどうぞ。

前スレ
ADO.NETの質問・雑談スレ
http://pc11.2ch.net/test/read.cgi/db/1104630889/
2NAME IS NULL:2009/02/09(月) 20:25:16 ID:???
前スレの流れ
1.DataAdapterってReadOnlyにしか使えないね。
 ・自動生成のSQLはUpdateのコードは使えない。
 ・やはり、Updateは自分で生成した方が良い。
 ・サーバカーソルが無いしDataTableのDataRowの状態をみて自動生成のスタイルという結論に落ち着く。
2.DataSetって意味あるの?
 ・DataAdapterからDataTableに読み込んだ方が軽くて良い。
 ・GUIを中心としたスタイルならば、型指定されたDataSetもいいかもしれないが。
3.LINQ使えば無問題
 ・ADO.NETを使う必要はなくなるよ。
 ・いや、これは大幅な仕様変更が出てきそうだから当分はADO.NETじゃね?
4.DataReaderについて
 ・GUIよりもコードを書くスタイル、とにかく軽さを優先する、非接続の設計の場合はこれが一番。
 ・早くて軽いという設計だが、ADO房は無意味にこれを使いたがるから困りものだ。
3NAME IS NULL:2009/02/10(火) 10:04:22 ID:???
>>2
まとめ乙。

ところで、4番の非接続は接続の間違いじゃね?
4NAME IS NULL:2009/02/10(火) 20:27:31 ID:???
>>3
確かにそうだ。投下した後に気づいたが、無駄にスレを汚すので、
ま、いいやと思ってたw
5NAME IS NULL:2009/02/12(木) 07:29:56 ID:???
UPDATE のコードを自分で書くしかないという結論には同意だけど、
では、具体的にどんなコードを書いたら良いの?って感じの情報交換は
出来ないのかなぁ?(ADO.NET とはずれてくる話かもしれないが)
例えば、同時アクセスが少ない場合は WHERE 以下は主キーのみで良いとか、
もうちょっとシビアに考えるならば、タイムスタンプを使ったほうが良いとか、そういう
意見交換なんだけど。

スレの誘導でもかまわないので、どなたか意見お願いします。
6NAME IS NULL:2009/02/12(木) 21:47:30 ID:???
DataAdapterの機能はしょぼいとか使えないとか言われているけれど、
ライブラリの機能として提供できるものはこれくらいで終わりなのかな?

市販のでは、「複数のテーブルを参照する SQL によって取得したデータであっても
自動で更新するコードを生成する」ライブラリはあるようだが。
ttp://www.asterworld.com/ja/srcdoc/Asterworld.Data.AwDbExData.html

VB6までの時は、純粋にVBだけでの開発は効率が悪くて、別の会社が出してる
モジュールをあわせて購入するのが当たり前になってたけど、.NET の場合も
そんな感じに落ち着くのかな。
ttp://www.grapecity.com/japan/support/database/dotnet_productlist.htm
7NAME IS NULL:2009/02/13(金) 01:17:49 ID:???
>>5
SELECTで取得した対象に主キー揃って無いとダメとか制限あったような<自動生成
自分の場合は、WHERE以下は主キー+更新時刻で楽観ロックとすることが多い。

>>6
それなりのことは.NET内で出来てしまうから、
.サードパーティの製品が必要かどうかを考え直す癖がついたな。
Excelの出力とか、客の要求が細かいときのGrid周りとか、
そういうめんどくさいところは予算と期間と相談して決めてる。

8NAME IS NULL:2009/02/13(金) 08:11:48 ID:EjaPaESH
更新時刻じゃ秒が重なったら終わりじゃん?
せっかくタイムスタンプがあるんだから
タイムスタンプ使った方がいいんじゃん?
9NAME IS NULL:2009/02/13(金) 11:04:03 ID:???
タイムスタンプを使ってないということは、Accessのmdbファイルに
限った話なのかな?
10NAME IS NULL:2009/02/13(金) 11:10:20 ID:???
俺の場合、UPDATEはシビアに同時実行制御をする必要がないため、
(比較的規模の小さな、数人使用のシステムの場合が多い為)
WHEREは主キーを指定するのみで、強制上書き方式でやってる。

強制上書きというのは、「読み込み時」と「データ更新直前」の
データが同じであるかをチェックせずに、主キーを指定して
UPDATEを実行という意味合い。
すでに誰かがレコードを削除していて・・・という場合はエラーが
出るが、そのあたりの処理は書く必要もないかなと思う感じ。

「設計は場合による」といってしまえばそうだが、個人レベルの
開発だとこういうのが大多数じゃないかなと思うけど、どうかな。
11NAME IS NULL:2009/02/13(金) 13:04:13 ID:???
TIMESTAMPも使うけど、数人〜の小規模で
業務内容的に被らない想定のときは
更新日時の列作って使いまわしてしまう。

同じ業務の人が何人も居て被るかもーとなったらTIMESTAMP、
衝突上等となったら…行ロックするか、一次的な編集禁止フラグでも立てるか。
12NAME IS NULL:2009/02/13(金) 20:14:08 ID:EjaPaESH
>>10
消えてもいいデータがあるってのならいいけど
timestamp列をつくって主キーと一緒にチェックするだけで
楽観ロックできるんだからやったほうがいいと思うけどなぁ。
13NAME IS NULL:2009/02/13(金) 23:59:49 ID:???
>>12
データを更新する際、主キーは同じだけどtimestampが異なってるという時の
処理は具体的にどうするのって思ってしまうんだよね。
ユーザに(「このデータは誰かが更新中です。上書きしますか?」みたいな)
ダイアログを表示させても、ユーザは結局はそのダイアログだけでは上書きしても
良いかどうかの判断は出来ないしね。
適当に「はい」を押してしまえってなって、その機能を実装した意味が実質
なかったりするって体験があったんだけど、どうよ?

これは、たまたま俺が悪いユーザにあたっただけかな?
14NAME IS NULL:2009/02/14(土) 00:08:41 ID:???
どういうアプリであるかによって、処理内容がという場合もあると思うので、
具体例を一応書いておきます。

名簿の管理ソフト
すでに登録しているAさんのデータを修正し、「更新」ボタンを押した。
その時、「すでに他の人が・・・」というメッセージが表示された。
その時点では、他の人が修正したデータの内容は確認出来ない。
また、念のためと思って更新しないで、データを確認してみると、
間違ったデータであり、自分は再度同じデータを入力する羽目に
なってしまった。ああ、面倒だ・・・みたいな。
15NAME IS NULL:2009/02/14(土) 00:54:50 ID:???
基本はエラーメッセージを出して入力し直しだろうな
間違ったデータを入れるとかかなりレアなケースだろうし、
99%くらいは、あ、オレの代わりに誰か入れといてくれたか
くらいですむんじゃね?
こんなん絶対ゆるさーん、とかいうユーザは
しょうがないからフラグでもたててロックかけるしかないんじゃね?
16NAME IS NULL:2009/02/14(土) 19:41:36 ID:???
基本は読み直して再入力でしょう
楽観的ロックすらしないでおくと
先に編集したのが無効になっちゃうわけだから

オフコン使ってた時はそんなの関係ねーでやってたみたいだけどね
富士通cobolだったかな

あとはロックとかフラグたてるけどあとから来たほうが所有権
ぶんどれるような仕掛けにするとか
17NAME IS NULL:2009/02/15(日) 12:22:31 ID:???
>>13
既に書かれてるけど、結論はケースバイケース。

・エラーメッセージを出して更新処理を中断し、再度データ確認後に必要なら再入力。
・そんなの関係ねぇで、更新する。

俺がいつもやるのは下記の通り。

主キーとタイムスタンプでチェックし、タイムスタンプが異なっていた場合、
・エラーメッセージを表示
・更新画面でユーザが入力した値は残しつつ、現在のデータを並列表示させる。
 (別画面とか入力項目の上とか画面上または下とか場合によって表示場所は事なるが・・・)
・ユーザは現在の内容を確認し、変更の必要がなければ処理を中止
・変更が必要な場合は再度入力値を確認、修正の後に更新を行う事ができる。
18NAME IS NULL:2009/02/15(日) 17:16:16 ID:???
ケースごとに分けてWHERE以下などをどう書いていったらよいのかをまとめるといいかもね。
ケースバイケースという結論になるのも分かるけれど、どういう処理をした方が良いかは
ADO.NETは提供しない(当然だが)のだから、そのあたりのノウハウをまとめるのは必要だと思う。

0.スタンドアロン
・UPDATE時は主キーのみでおk
・将来の拡張を考えるならば、1を参考にコーディングしておくと良い。

1.小規模、同時アクセスが少ないケース
・UPDATE時のWHERE 以下は主キーとタイムスタンプで確認
・ダイアログを出して判断を促すなど。

2.同時アクセスが多く、先にデータを表示させた方が更新できるようにするケース
(列車の予約で、空席の状況を確認し、予約するなどのケース)

3.同時アクセスが多く、確実に更新処理を行いたいケース
(銀行で自分の口座から他銀行の口座へ振込みを行うなど)
19NAME IS NULL:2009/02/15(日) 23:36:07 ID:???
3においてはUPDATEの内容よりも、Transaction を設定するみたいな話だな。
「ケースに分けてWHERE以下」というよりも、「ケースに分けてUPDATEの方法を」だったな。訂正
20NAME IS NULL:2009/02/20(金) 19:02:54 ID:???
ADO.NETになっても結局SQL文を生成するスタイルはそんなに変わらないの?
21NAME IS NULL:2009/02/20(金) 19:40:24 ID:???
自動生成は使ったことないな
SQL Server2008だけどManagementStudioでクエリ手書きで書いて
パラメータ化してDataadapterかDatareaderにいれるケースが多い
伝票の登録とかもsqlcommandでパラメタ化した素のinsert文とか
排他制御はtimestamp使って楽観的ロックを自前で
複雑な処理はストアドにして結果をselectで返すようにして
DatasetにFillして処理
Access使ってた時はGUIのクエリデザイナで書いてたけど
慣れたら手書きのほうがやりやすいな
22NAME IS NULL:2009/02/20(金) 20:06:49 ID:???
ADO.NETは、SQLの自動生成機能を強化するかと思ってたが、そうでは無いみたい。
SQLは自分で書くスタイルを維持してて、それ以外の部分をウィザードやGUIで操作
出来るようにするモットーのようだ。(俺はウィザードやGUIはほとんど使わないけれどw)
今後は、SQLコードを書く際の支援(LINQ)をする方向に持っていくと見るといいのかな。
23NAME IS NULL:2009/02/20(金) 20:12:33 ID:p5QGPAc4
>>22
LINQ使ったことないけど、見ただけだと、O/Rマッパーっぽい感じがしてるんだけど
#違うか
24NAME IS NULL:2009/02/20(金) 20:14:29 ID:???
なるほど
自動生成スゲー!ADO.NETスゲー!って思って手を出してみたんですが、
なんとなく扱いづらい気がして結局手で書いてる自分がいて「コレでいいのか?」と疑問に。
なかなかうまくいかないなあ。

意外に人がいてびっくり。
25NAME IS NULL:2009/02/20(金) 20:18:12 ID:???
>>23
LINQのモットーはこれじゃないの?
今までは、操作するデータが異なると、その処理を行うコードもそれにあわせて
書く必要があった。(例えば、配列の全データにアクセスするコードと、
DBからテーブルを読み込んで全データにアクセスするコードは異なる。)
そこが面倒なので、処理を行うコードを統一化しよう、という考え。
26NAME IS NULL:2009/02/20(金) 20:37:00 ID:???
linq to sql はそこそこ便利だったぞw
27NAME IS NULL:2009/02/20(金) 21:50:55 ID:???
>>26
便利かもしれないが、しばらくの間は、規格が変わったりしそうに思う。
なので俺は ADO.NET を使うように考えてるな。
28NAME IS NULL:2009/02/20(金) 22:34:52 ID:???
>>26
ADO.NET と関係しそうなところを中心にレビューよろw
29NAME IS NULL:2009/02/21(土) 15:07:14 ID:???
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"));

    using (OleDbDataAdapter da = new OleDbDataAdapter(selectcmd))
    {
      DataSet ds = new DataSet();
      da.Fill(ds);



田舎なので本屋にプログラミング関係の本がない・・・
「プログラミングMicrosoft ADO.NET2.0」って良書ですか?
30NAME IS NULL:2009/02/21(土) 17:47:12 ID:???
>>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);
}
これで済ませたいところなんだけど…このとき生成されたCommandやConnectionは解放されない。まさに仕様という名のバグw

このへんからいくつか辿ってみるとちょっと良いことあるかもしれない。
http://www.ailight.jp/blog/mnow/archive/2006/05/28.aspx
31NAME IS NULL:2009/02/21(土) 23:16:30 ID:???
>>29
Connectionのusingだけで十分だ。
CommandやDataAdapterのインスタンスがDisposeされるまでに
時間がかかるが、そんなもん放っておけば良い。
重要なアンマネージリソースはConnectionにしかない。
3229です:2009/02/21(土) 23:50:13 ID:???
Dispose基準は重要なリソースか・・・目からウンコがおちたようだ。
せっかくのGCを無駄にするところだったかな。
URLありがとう、じっくり読んでみます。
33NAME IS NULL:2009/02/23(月) 03:34:32 ID:kcpJjeEI
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();
(データを取得する処理 省略)
}
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()で例外を発生させないようにできるのでしょうか。
34NAME IS NULL:2009/02/23(月) 09:58:47 ID:wqMGnrpl
>>(データを取得する処理 省略)
while で回してる?
35NAME IS NULL:2009/02/23(月) 20:30:44 ID:???
hasrowでチェックするとかしたら?
36NAME IS NULL:2009/02/23(月) 21:18:04 ID:???
クエリの中のどっかがプレースホルダとして認識されてんだろjk
テーブル名と列名全部ブラケットで括ってみ。

//CurrentRecordが無いところでFieldを参照しようとした場合はInvalidOperationExceptionになる。
//OleDbExectionにはならん。
37NAME IS NULL:2009/02/23(月) 21:31:53 ID:???
//同じコードで>>33試してみたが再現せんな…
38NAME IS NULL:2009/02/23(月) 22:10:44 ID:???
>com.ExecuteReader()で
catchで捕まえたからではなく、ステップ実行してそこで例外発生したって認識でOK?
フィールド名のtypoだったらレコードの有無に関わらず発生しそうなものだけど・・・。
同じく試してみたけど再現しないですね。
39NAME IS NULL:2009/02/23(月) 22:20:28 ID:???
if ( !com.Read() )
{
  // データないときの処理
}


…なんてやってるわけないよね。
40NAME IS NULL:2009/02/24(火) 08:55:02 ID:???
まさかとは思うが、レコードがないってのは
テーブルは存在してるんだよな?
41NAME IS NULL:2009/02/24(火) 19:24:19 ID:???
そこまで疑うのかよww
42NAME IS NULL:2009/02/25(水) 06:57:33 ID:???
>>33
どうやったらっていうか、普通レコードがなくても例外は発生しません

JETのSQLが間違ってる時のエラーメッセージはかなりいい加減だからなぁ
ほんとにExecuteReaderでエラーになってるなら、フィールド関係ないとは思うんだが、
実際に実行してるSQLは>>33とまったく同一?
JETはカラムかテーブル名が見つからないと、パラメータが足りないみたいなメッセージを出す時がある
だから>>36>>40のような指摘があるわけなんだが...nameやsortが予約語だったりするのか?

あと可能性としてはMDBが壊れてる可能性もあるな
一度ACCESSで修復かけてみては?
43NAME IS NULL:2009/02/25(水) 11:43:53 ID:???
>>33
ソース見るに finally は try ブロック内で実行されると思ってない?
あくまで finally が実行されるタイミングはメソッド終了時。
using で宣言してるオブジェクトが解放されるタイミングもそう。

メソッドがこのソースで完結してるなら問題はでないと思うけど、
ほかにもいろいろ処理が含まれるなら思わぬ問題が出る可能性があるね。
using or try のネストはその辺理解して使わないと後でめんどいよ。

つーことでこのソースだけじゃ不具合原因はわからんと思う。
>>42 が言うように JET のエラーメッセージは当てにならんw
44NAME IS NULL:2009/02/25(水) 22:33:57 ID:???
Dim DS As New DataSet
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とかデータ型にあった方法あるけど
45NAME IS NULL:2009/02/26(木) 01:35:24 ID:???
>>44
単一の値を取ってくるなら、ExecuteScalarを利用すると良いよ。
あと、型があらかじめわかってるならToStringやCTypeよりDirectCastの方が良いな。
46NAME IS NULL:2009/02/26(木) 04:16:14 ID:???
>>45
揚げ足をとるみたいだが、それはDBから値をとるなら、だな
まあ、まずデータセット使う必要があるのかという話もあるんだがw

データセットから値を取り出すなら、って質問だし、
ここは型付きデータセット使えってのがMS的推奨回答じゃないかな
47NAME IS NULL:2009/02/26(木) 08:41:34 ID:???
だから2行目のキャスト。上で書いてるGet〜メソッドも型がわかってて使うわけだからさw

型付データセットを使わない場合であれば、どんな型で入ってくるかは
http://msdn.microsoft.com/ja-jp/library/cc716729.aspx
4844:2009/02/26(木) 11:47:22 ID:???
型付データセットは手間かかりそうでなんかいやなんだよね^^
さくっとSQL書いて結果欲しい時にいちいちデザイナ?xml?とか
49NAME IS NULL:2009/02/26(木) 13:53:28 ID:???
さくっと結果がほしいだけならデータセット使う必要すらないだろう
DataReaderつかえよ。まさに>>45の指摘の通りだ。>>2のまとめも読んでみろ

データセットから値をとりだすのは、まあどんな方法も似たり寄ったりだろう
コードの書き方とかキャストのしかたとかに多少の差がでる程度かと

50NAME IS NULL:2009/02/27(金) 23:11:52 ID:???
データセットから取り出すコード、個人的にはあまり美しいコードとは思えないんだけど、
そうせざるを得ないんだよなあ・・・(´・ω・`)
51NAME IS NULL:2009/02/28(土) 07:26:54 ID:???
>>50
比較としてどんなコードが美しいのかを書いてくれた方が話も進むと思うんだが。
52NAME IS NULL:2009/02/28(土) 14:36:21 ID:???
>>51
イヤ直感的な意味であって「これがいい!」というのはないんだ、すまない。
53NAME IS NULL:2009/02/28(土) 22:06:39 ID:???
クラス?配列?作ってdatareaderでloopしていれていくより
datasetにfillして取り出す時に適当にcastする方が楽だんだよね〜
ちょっとした印刷なら全部tostringで済んじゃうし
54NAME IS NULL:2009/02/28(土) 22:18:44 ID:???
さくっと結果がほしいだけならDataSetにFillするのが楽だよな
55NAME IS NULL:2009/02/28(土) 22:35:46 ID:???
型指定されたDataSetであれば、クリスタルレポートを使わずとも、
ドラッグ&ドロップで帳票が作れるところまで機能があれば、
Access依存度も解消できるのになぁ。。。
なんか、DataSetにFillっていうのは、ちゅうぶらりんな気がする。
56NAME IS NULL:2009/02/28(土) 22:45:31 ID:???
そこで>>2
2.DataSetって意味あるの?
 ・DataAdapterからDataTableに読み込んだ方が軽くて良い。
 ・GUIを中心としたスタイルならば、型指定されたDataSetもいいかもしれないが。
57NAME IS NULL:2009/03/01(日) 04:25:39 ID:???
型指定されたDataSetって何の事?
58NAME IS NULL:2009/03/01(日) 09:15:46 ID:???
>>57
参照されたし
http://msdn.microsoft.com/ja-jp/library/esbykkzb.aspx
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html

object型じゃなくて厳密に型が決まっているからコンパイル時にチェックができたりインテリセンスが効いたり
59NAME IS NULL:2009/03/01(日) 12:31:11 ID:???
>>33は結局何がどうなったんだろう
60NAME IS NULL:2009/03/01(日) 21:22:31 ID:???
>>57を読んで、ADO.NETが以前よりも浸透して、このような質問をする人が
出てくるようになったのかなと思った。
ちょっと前までは、MSDNや公式図書くらいしか情報源が無くて、それを
しっかりと読んだ人たちだけが書き込みしてたような感があったからなぁ。
61NAME IS NULL:2009/03/01(日) 23:12:28 ID:???
MSDNや公式図書をしっかり読まないような人がプログラムするには、
今の.NET環境は敷居が高すぎると思うんだが
62NAME IS NULL:2009/03/02(月) 00:06:03 ID:???
型指定されたDataSetって、SQL Server以外でも使えるの?
MySQL, Postgres, SQLiteとかで。
63NAME IS NULL:2009/03/02(月) 00:16:35 ID:???
つかえるよ
64NAME IS NULL:2009/03/02(月) 22:59:41 ID:???
>>61
そうなんだよな。だから、VBが誰でも組めるお手軽言語じゃなくなってしまった。
VB6は完全にサポート打ち切ってしまったしね。
それで、VB.NETの意義もちゅうぶらりんな感じになった。

代わりに、ADO.NETなどが非常に使い勝手の良い、便利な機能満載の
物であればいいのだが、実際は、他の言語でDB接続する場合と大きく変わらない。

言語仕様を大幅に変えてしまった上、過去のバージョンのサポート打ち切り、
開発ツールの販売ばかりを考えた方針にあきれてしまって、VBでの開発を
打ち切る方向にしたところ、結構あるんじゃないかな。
65NAME IS NULL:2009/03/03(火) 01:53:13 ID:???
>>64
正直、VB6なんてもう触りたくねー
Windows7でも動作することになったからまだ続くんだろうけど。

開発ツールの販売って、何か問題ある?
土方業務用なら、MSDNサブスクリプション1人1ライセンスで大体は事足りると思う。
まぁそれすらケチる会社もあるがw
66NAME IS NULL:2009/03/03(火) 21:16:08 ID:???
>>65
一人1ライセンスじゃねー
会社で1ライセンスじゃあああああああああああ
67NAME IS NULL:2009/03/04(水) 04:25:50 ID:???
DBを正規化してると、レコード追加時に文字列そのものじゃなくて親テーブルのID値を
INSERTしなくちゃいけない事が多いと思うんだけど、その辺のめんどくさい処理を
DataAdapterとかで上手く処理出来たりする?

親テーブルに未追加だったら追加して……、あたりの処理も含めて。
68NAME IS NULL:2009/03/04(水) 18:10:08 ID:???
>>67
残念だが、DataAdapterは、各種Commandオブジェクトに格納されている
SQL文を実行するくらいの機能しかもちあわせていない。
69NAME IS NULL:2009/03/04(水) 18:14:34 ID:???
ADO.NET の売りを見つけようとしても、あまり大したものは見つからなかったりする。
(同じようなものを0から作ろうとすると、非常に面倒なのは分かるが)
・各種DBに接続するためのコネクションなどが準備されている。
・DataTableがあるので、配列を準備してテーブルのデータを読み込んで処理する手間が省ける。
これぐらいかな。

>>67がいうような、DBで行うことの多い処理を自動でやってくれるような
クラスが準備されているのであれば、非常にいいんだろうけどな。
(処理速度が多少遅くなる分はいいとして。)
それが無いから、特に魅力を感じなかったりする。
70NAME IS NULL:2009/03/06(金) 08:03:04 ID:???
SQL Server があって、それに VB6 で ADO で接続しているシステムがある。
これに、ADO.NET で接続するプログラムを追加しても、問題ないとみていいのかな?
それとも、VB6 と VB.NET の混在は開発元がサポート範囲内では無いと
考えているので、あまり好ましくないとなるのかな?
71NAME IS NULL:2009/03/06(金) 08:10:38 ID:???
問題ない
72NAME IS NULL:2009/03/06(金) 22:02:55 ID:???
何が問題なのかわからない
73NAME IS NULL:2009/03/07(土) 03:33:25 ID:???
質問です。

フォームにテキストボックス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またはパスワードが違います。");
}
}
74NAME IS NULL:2009/03/07(土) 09:19:04 ID:???
>>73
メッセージボックスが表示されるというのは、何のメッセージボックスなの?
システムエラーメッセージとか?
MessageBox::Show("ユーザIDまたはパスワードが違います。");
これのことだったら、必ず表示されると思うんだが。
75NAME IS NULL:2009/03/07(土) 09:45:01 ID:???
ありがとうございます。

MessageBox::Show("ユーザIDまたはパスワードが違います。");

これが表示されます。

if(dr["LoginID"] == textBox1->Text && dr["Password"] == textBox2->Text)
{
  frmtest->ShowDialog();
}

ここが実行されて欲しいんです。

ボタンを押したときにテキストボックスに入力したIDとパスワードがDBに登録されているデータと比較して一致していたら遷移する
というふうにしたいのです。

なぜ必ず偽になってしまうのか分かりません。
76NAME IS NULL:2009/03/07(土) 12:59:27 ID:???
>>75
ADO.NETの話じゃないぞ。
もう、プログラム辞めたら?
77NAME IS NULL:2009/03/07(土) 18:49:49 ID:???
ステップ実行してみろ
話はそれからだ
78NAME IS NULL:2009/03/07(土) 19:26:12 ID:???
C#使おうぜ
79NAME IS NULL:2009/03/08(日) 18:12:29 ID:???
デバッグ時くらい、そのエラーメッセージに
dr["LoginID"] textBox1->Text dr["Password"] textBox2->Textも混ぜとけば
80 [―{}@{}@{}-] NAME IS NULL:2009/03/09(月) 09:29:39 ID:???
全行検索して何したいやら・・・
81NAME IS NULL:2009/03/09(月) 20:40:39 ID:???
ユーザーが増えてきたら大変だなw
82NAME IS NULL:2009/03/10(火) 22:36:36 ID:???
パスワードを生で保存すんなよと・・・
83NAME IS NULL:2009/03/11(水) 00:45:52 ID:???
パスワードなんか生でいいよ、
パスワード忘れたから教えろとかうぜーんだよ
84NAME IS NULL:2009/03/11(水) 10:44:10 ID:???
パッと見でわかるようには保存しないかな。
復元可能な形にするかどうかは運用次第。
85NAME IS NULL:2009/03/14(土) 16:10:51 ID:???
連載:VB研公開ゼミ議事録
第7回 ADO.NET開発初心者の疑問、解決します!
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_07/opensemi_07_01.html

@ITの記事もだいぶ増えてきたね。
内容としては、2ちゃんねるのスレで語られたことの要約だと感じる部分が多いがw
86NAME IS NULL:2009/03/14(土) 19:41:11 ID:???
>>85
なんか初心者向け?っぽいね
パネラーは熟練者なんだろうけど
87NAME IS NULL:2009/03/15(日) 16:09:16 ID:???
メリットとしては、いろいろなDBへの接続クラスが準備されていることと、
非接続型への対応ということだが、それ以外に語っていないということは、
特に目立ったメリットがないということなんだなw

つまり、大きなメリットはないが、状況的に変えなければならないので、
我慢をして受け入れなさい、とw
こういうところで、VBの言語仕様が複雑になったことをフォローできる
くらい大きな便利機能があるべきだと思うのだが。
88NAME IS NULL:2009/03/16(月) 07:19:03 ID:???
>>87
> メリットとしては、いろいろなDBへの接続クラスが準備されていることと、

これ全然メリットじゃないよね
よし、今日はオラクルでいっとくか
雨の日はMS SQLにしとくか
週末はDB2だな。アゥ
89NAME IS NULL:2009/03/18(水) 14:49:44 ID:???
http://blogs.msdn.com/nakama/archive/2008/10/16/ado.aspx

何も考えずにサーバカーソル使われることが無くなったのが
一番のメリットかもしれん。
90NAME IS NULL:2009/03/22(日) 10:26:54 ID:s8j4mKbf
datatable.load(sqldatareader) が使えるのは、すげー楽なんだが
#と普段VB6が多いので、特にそう思う

>>88
オレもそう思う

>>89
countとるのめんどいからいや
91NAME IS NULL:2009/03/23(月) 23:10:33 ID:???
バーサーカーソウルに見えた
92NAME IS NULL:2009/03/31(火) 02:02:31 ID:???
非接続型について質問なのですが、
エントリ系のプログラムで、伝票Noを叩いた時には、Datasetで取得して、非連結フィールド・datagridviewへセットして見せてます。
ここまでは良いと思っていますが、その後にDataを修正・実行ボタン等でsqlserverへ更新しに行く時に、非接続でのUpdateを使わずに、接続型で更新しに行ってます。
例えばDataがdatagridviewにセットされている場合は、レコード数分loopしてUpdateしてます。
というのも、Transaction内での非接続による処理がネットを検索してもあまり出て来ず、Taransaction使うなら接続型っていう頭になっちゃってます。
なので、FormにData引っ張ってくる時は非接続型、sqlserverへ追加・更新次時は接続型でいつもやっているのですが。。
これってイレギュラーですか?
93NAME IS NULL:2009/03/31(火) 07:38:10 ID:???
別にいいんじゃね
94NAME IS NULL:2009/03/31(火) 12:01:31 ID:???
もう一点。

1Transaction内で、接続型・非接続型の両方を使いたいと思ったりするのは私だけでしょうか。
現実的には接続型で接続中に非接続型を利用・・・・もしくはその反対(もちろん1Transaction内)

これって?
95 [―{}@{}@{}-] NAME IS NULL:2009/03/31(火) 12:17:50 ID:???
>>94
System.Transactionsでも使えばどうよ
96NAME IS NULL:2009/03/31(火) 18:03:26 ID:???
>>95
ありがとう。
System.Transactions見てみたけど、敷居高そうな希ガス。
97NAME IS NULL:2009/04/01(水) 01:39:46 ID:???
sql server相手なら余裕
98NAME IS NULL:2009/04/01(水) 05:55:40 ID:???
つか、DBを更新に行ってるなら、その間は接続してるだろう
接続型とか非接続型とか分けて考えるのがおかしくないか?

接続型、非接続型と、連結、非連結の区別がついてないんじゃないか?
99NAME IS NULL:2009/04/01(水) 10:43:14 ID:???
>>98
>接続型とか非接続型とか分けて考えるのがおかしくないか?

分けて考えるのは当然と思っていますが。
まったく動作が異なるので。
もちろんDB更新時には接続型・非接続型関係なく接続しないと更新できない訳で。。
それを承知で、1Transaction内で接続型・非接続型の両方を使うということについて
意見を聞いていたのですが。。
100NAME IS NULL:2009/04/01(水) 10:44:15 ID:???
連投すまん。

>>97
>sql server相手なら余裕
そうなの?
101NAME IS NULL:2009/04/01(水) 14:18:45 ID:???
>>99
>まったく動作が異なるので。
俺にはDBの更新については本質的に同じだと思うんだが
ADO.NETが接続型ならサーバカーソルでカレント行更新できるとか言うなら話は違うが

あなたのいう、「非接続でのUpdate」と「接続型で更新」というのを、具体的に挙げてみてくれないか?
102NAME IS NULL:2009/04/01(水) 18:01:50 ID:???
>>101
すまん。「まったく動作が異なるので。」っていう表現は間違っていた。

DB更新に至るまでのプロセスが違うっていう意味で言ってた。
103NAME IS NULL:2009/04/01(水) 18:55:07 ID:???
そもそもADO.NETで接続型って、DataReaderしかなかった気がする
DataReaderで更新はできなかったはず
104NAME IS NULL:2009/04/01(水) 22:06:36 ID:???
>103
>接続型って、DataReaderしかなかった気がする
ん? 何寝ぼけたこと言ってんの?

>DataReaderで更新はできなかったはず
当たり前。

ExecuteNonQueryって知らないの・・・?

もう一度勉強してこいや!
105NAME IS NULL:2009/04/02(木) 08:14:28 ID:???
>>104
>ExecuteNonQueryって知らないの・・・?
いやそれは知ってるが・・・
>もう一度勉強してこいや!
勉強してきた。
確かにExecuteNonQueryは接続型になってるな

自分で楽観的ロック作りこんで接続1回切っても接続型なのかよ
ちょっとショックだ

MS的には
非接続型=DataAdapter
接続型=Commandオブジェクト
らしいが、DataAdapterが実際のDB操作に使うのはCommandオブジェクトなんだよな
それでも自分でCommandオブジェクト使うと接続型ってのはちょっとどうなのよ

>>94
非接続型=DataAdapterらしいので、DataAdapterで処理できないなら混在せざるをえないな
DataSetに対してSQL発行できない以上、混在するのは避けられないんじゃない
そもそもDataAdapterがDBに対してCommandオブジェクトでSQL発行するので
DB的に混在が問題になるとは思えない
あとはプログラミングスタイルの問題だけじゃないかな
106NAME IS NULL:2009/04/02(木) 19:28:27 ID:???

言ってる意味がよくわからん
107NAME IS NULL:2009/04/02(木) 21:00:07 ID:???
接続型と非接続型の違いを言ってみろ。
わかってないだろ
108NAME IS NULL:2009/04/02(木) 23:37:34 ID:???
>>105 って、
たぶんADO.NETは使ったこと無いんだろうな。
109NAME IS NULL:2009/04/03(金) 08:43:50 ID:???
違いは、
>非接続型=DataAdapter
>接続型=Commandオブジェクト
って書いてあるだろ。
根拠はttp://msdn.microsoft.com/ja-jp/events/dd279508.aspx のコラム欄な
これが間違ってるならぜひ教えてほしい

なんかその区別に意味があるのかわからなくなってきたぜ
110NAME IS NULL:2009/04/03(金) 17:52:25 ID:???
>>109
その第一回をよく読め。
あんたの知りたいことが全て載っている。
111NAME IS NULL:2009/04/03(金) 23:21:19 ID:???
いや、とうぜん第1回もよんだぞ
まあ確かに、非接続型=DataAdapter、接続型=Commandオブジェクト は短絡的すぎるかもしれない
で、聞いてみたい

このコラムの1回目の リスト7 非接続データアクセスでのトランザクション更新のサンプル
UPDLOCK指定したSELECT発行して、トランザクション発行して(しかもシリアライズで)コネクションオープンしたままだ
これは実験してないし違ってるかもしれないが、おそらくデータセットのデータ更新してる間も実際にDBと接続を保ったままだろう
これでも、非接続型らしい

自分で楽観的ロック作りこんで接続1回切るようなスタイルはどっちだと判定する?
このコラムの指針なら、データセット使わないと接続型か

俺の考え方だと、
ある作業をしている間DBへの接続を保つのは接続型、
その間接続を開放して再度接続するのが非接続型、
という区別であるべきだと思うんだが(実際第1回でもそういう風に説明されている)、
データセット更新中に接続をたもっていても非接続型
データ取得して接続を開放し、再度接続してDB更新しても接続型
とされる今の非接続型、接続型の区別にどんな意味があるんだ?

第1回には
>DBMS への接続時のデータアクセスにおいては、どちらも本質的な違いはない。
とも書いてあるな。
つまりDBMS観点ではその区別に意味はなく、じゃあこれを区別する意味はどこにあるんだ?
112NAME IS NULL:2009/04/04(土) 01:31:10 ID:???
ネットワークの負荷だろ
113NAME IS NULL:2009/04/04(土) 02:40:17 ID:???
>DBMS への接続時のデータアクセスにおいては、どちらも本質的な違いはない。
らしいぞ。ネットワークの負荷に差がでる理由を教えてくれ

ローカルのデータセット更新中も接続を保持する非接続型があるってことも考慮してくれな
114NAME IS NULL:2009/04/04(土) 11:28:20 ID:???
このくだらない話の流れって、>>92がずっとひっぱってるんだよな?
なんだか、システムを組んだことがないニートの戯言のような雰囲気を
感じるのだが。
敷居が高そうだから使わないとか、理由がお粗末杉。
115NAME IS NULL:2009/04/04(土) 16:00:52 ID:???
>>113
だからちゃんと記事を読めよw
116NAME IS NULL:2009/04/04(土) 18:06:39 ID:???
このスレで、「Updateする場合自動生成されているSQL文をそのまま実行するのに抵抗がある」
という意見を持っている人は、LINQ to SQL(広く言うとO/Rマッピング)を使う気にはなれず、
ADO.NETを使い続けるのかな?
となると、今後の.NETのDB関連のコーディングスタイルは二分化していくよな。
お互いのコーディングの比較の議論が交わされるとか。
117NAME IS NULL:2009/04/04(土) 18:16:19 ID:???
>>89で紹介されてるサイトで、ADOは複数テーブルから JOIN したデータに
対する非接続型のデータ更新メカニズムもサポートされているとあるが、
俺はそればっかり使ってたから、ADO.NETになって、DataAdapter.Update()が
思うように動作せず、非常に苦労したw
なんでバージョンアップなのに、UPDATEする際はSQL文をかかないといけないんだ
みたいなw

ADOの時は、SQL文はSELECTのみ書いて、あとはrecordset.update()
っていうスタイルの人、結構いたんじゃないかな。
118NAME IS NULL:2009/04/04(土) 18:30:02 ID:???
>>115
まじめに、ちゃんと記事を読んだ上で、ネットワーク負荷に差が出る理由がわからんのだが
バカな俺にわかるように説明してくれないか
119NAME IS NULL:2009/04/04(土) 21:22:30 ID:???
LINQ to SQLは現バージョンでは更新系は弱いとMSが言ってるだろ。
Entity Frameworkに期待しなさい。今は過渡期である。
120NAME IS NULL:2009/04/05(日) 03:16:11 ID:???
iBATIS.NETを使うといいよ。JavaのO/Rマッパーの移植。
121NAME IS NULL:2009/04/05(日) 09:34:13 ID:???
nhibernateはどうよ?
122NAME IS NULL:2009/04/05(日) 16:11:09 ID:???
ん?DataTableのDataRowの状態をみてSQLを自動生成のスタイルの人って、
ストアドプロシージャとか使わないのかな?
ビジネスロジックを分けるという考え方よりも、SQL自動生成のクラスを
自作しているという感じで、O/Rマッピングを行うクラスを自作するような感じ?
123NAME IS NULL:2009/04/06(月) 23:04:14 ID:???
>>114
92だけど、102までしか引っ張ってませんが ^^;
124NAME IS NULL:2009/04/06(月) 23:10:40 ID:???
>>114
理由がお粗末で申し訳なかったね。
自分は分からないから、具体的に説明して。

どうせ、理由付けて教えては貰えないだろうけど。。(笑
125NAME IS NULL:2009/04/06(月) 23:56:59 ID:???
すまんな、俺が引っ張ったせいで92に迷惑が

んで俺的結論はそんな区別に大した意味ないから気にする必要はない、だが
ネットワーク負荷に差が出るんだから区別する意味はあるという人もいるみたい
負荷に差が出る理由はいくら考えてもわからないんで本気で教えてほしいんだがなぁ
126NAME IS NULL:2009/04/07(火) 07:34:48 ID:???
>>125
スタンドアロン、もしくは、それに近い環境のシステムしかイメージして無いから
そういう風になるんじゃないの?
もっと、大容量のデータをやりとりするとか、端末がたくさんつながっているとか
そういうケースもイメージしてでの結論なのか?

念のために解説しておくが、前者の場合は、違いはほとんどない。
127NAME IS NULL:2009/04/07(火) 11:03:39 ID:???
>>126
大容量のデータやり取りで差がでるのなら、少量のデータでも少々の差がでてるはずだよな
その差が大量になれば顕著になるだけの話だろ
実際にどのくらいの差が出るかはともかく、差が出る理由が知りたいんだが

同じように、端末何台あろうとも、負荷の差がでる理由にはならんわな
もしかしてお前の言うネットワークの負荷ってのは、アクセス集中だけをいってるのか?
負荷に差がでるんだから、1台あたりのトラヒック量に差が出ると解釈してるんだが

あ、ちなみに、接続型と非接続型で、どっちか負荷が高くてどっちが低いのだ?
128NAME IS NULL:2009/04/07(火) 11:12:01 ID:???
「非接続型」っていうのは、DB操作に関する一般的な用語ではなく
MSが独自に提案している用語だろ?
実際にぐぐってみるとADO.NETのページばかりがヒットする。
だから、「なんか詳しいことはよくわからないけれど」程度に
理解しておいてもいいんじゃないの?
第三者の俺から見ると、用語の定義についてしつこく
掘り下げて質問してる意図が良く分らんのだが。
129NAME IS NULL:2009/04/07(火) 11:49:20 ID:???
>>128
ここADO.NETの質問・雑談スレだし
ま、しつこ言わいとれれば実際そのとおりだが

いまの流れは、
>今の非接続型、接続型の区別にどんな意味があるんだ?
に対して、
>ネットワークの負荷だろ
ときて
>ネットワークの負荷に差がでる理由を教えてくれ
となり>>126
130NAME IS NULL:2009/04/07(火) 14:06:50 ID:???
じゃ、俺もこの議論に参加してみる。
接続型と非接続型の違いは、「DBに接続し、データの取得や更新を
する過程の部分」には無く、「取得したデータをローカルのメモリに
保存してるかどうか」の部分にあると思う。
だから、DataSetを使っていると非接続型、DataReaderは接続型
という風に分類されている。
131NAME IS NULL:2009/04/07(火) 14:14:00 ID:???
前スレの最後の方で語られていた事で、>>2の4.にまとめられている
ことだけど、「DataReaderを使いたがるスタイル」は、ADO房や
VB6プログラマに限ったことじゃないような気がする。
java(JDBC使い)から.NET開発に移ってきた人も、以前までやっていた
ものと似たようなスタイルでコーディング出来るDataReaderを
使いたがるんじゃないかな。

DB操作用のモジュールで、一般的な設計に近いものがDataReaderで
ある為、他の人にとって読みにくい!みたいな、問題が起きるような
気がする。
132NAME IS NULL:2009/04/07(火) 18:08:19 ID:???
http://www.shoeisha.com/mag/dotnet/pdf/870406/dotnet0406_153_Oracle.pdf
この文書には、「非接続型=DataSetクラスを使っていること」とあるな。
「接続型」、「非接続型」の用語の理解はこれでいいんじゃないの?
ネットワークの負荷の違いは、そのアプリケーションの組み方次第なので、
一概には言えない。(その人がイメージしているアプリの形によって差が
でるので、「こちらの方が負荷が違う」ということが多い)
133NAME IS NULL:2009/04/07(火) 19:52:47 ID:???
「非接続型=DataSetクラスを使っていること」は良いとして、
「接続型=DataSetクラスを使っていないこと」ではないと思うんだな。
「接続型」と積極的に言えるのはせいぜいADOなどで更新やスクロール可能な
結果セットを使った場合だと思う。
CommandやDataReaderクラスは非接続型か接続型という分類じゃなく、
そられを実現するための基本的なADO.NETデータプロバイダのファンクションそのものであると考えるべき。

ADO.NETを解釈すると、データプロバイダ(ドライバ)+DataSetフレームワークというべきもので
あるが、たびたびデータプロバイダのみをADO.NETと呼んだりするのでややこしいい。
ADO.NET Entity Frameworkでもデータプロバイダは共通なんだよね。
134NAME IS NULL:2009/04/07(火) 21:59:14 ID:???
>>132
それ、昔の.NETマガジンの記事だな
その記事みると、接続型はサーバカーソルのようにみえるな
まあ、対象がORACLEなんで若干の違いがあるのかもしれないが、
ADO.NETではサーバカーソルは(ADO.NETの機能としては)サポートしてなくて
DataReaderでさえサーバカーソルは使わないらしいが...

その記事でも、接続、非接続の区別が大事だって書いてあるなぁ

「非接続型=DataSetクラスを使っていること」が定義になるだろうってことに反対はしないが
>>130 がいうように、、「取得したデータをローカルのメモリに保存してるかどうか」が大事なとこなんだろうな
結果としてDataSetを使ってるというだけで
だから>>133の言うように>「接続型=DataSetクラスを使っていないこと」ではないと

ただ、その定義にしたがって考えれば、
「ローカルのデータセット更新中も接続を保持する非接続型がある」ことになるんだが
だったらその定義や、接続、非接続の区別が重要だとは思えないんだよな
接続型か非接続型かじゃなくて、コネクションをオープンしたままなのかクローズしてあるのか、
サーバ側のロックを保持してるのかどうかが大事なんだと思うんだが...

非接続型って言うと、どうしてもサーバ側のロック持てないイメージがあるんだ
名前がよくないのかもしれないな。これ、英語ではどんな単語で表現されてるんだろうなぁ
135NAME IS NULL:2009/04/07(火) 22:45:12 ID:???
残念ながらそのものズバリconnectionless
136NAME IS NULL:2009/04/08(水) 07:42:13 ID:???
俺は、「非接続型」というのは、DataSetをアピールするためのキャッチコピーの
ようなものだと思ってるんだけどな。そもそも、DB接続プログラミングに関して
そのような用語や概念は無かったのだから、DB設計をしたり実装したりする
時においてはさほど重要ではないと思う。
137NAME IS NULL:2009/04/08(水) 09:44:01 ID:???
接続型とか非接続型ってのは、MySQLのC APIで言えば、
それぞれ、mysql_store_result()とmysql_use_result()でしょ?
138NAME IS NULL:2009/04/08(水) 09:44:50 ID:???
あ、ごめん、順番逆に書いてしまった >137
139NAME IS NULL:2009/04/08(水) 10:42:48 ID:???
>>137
いい事いうじゃねえか。
出来るんだな?
今すぐ頼むぞ。
140NAME IS NULL:2009/04/08(水) 14:45:53 ID:???
>>137
MySQLよく知らないんで、その違いを説明してくれないか
ADO.NETのスレでMySQLに例える意味がわからんが
141NAME IS NULL:2009/04/08(水) 23:29:36 ID:???
ちょっとでしゃばって見たかったんだ てへっ
142NAME IS NULL:2009/04/09(木) 00:16:01 ID:???
javaのWebアプリ開発経験者です
今回、初のASP.NETの開発のため調査しています。

いまのところ、ASP.NETのDB処理は「非接続」で実装(javaと同じような)
すればよいという認識ですが、正しいでしょうか?

そもそも、このスレは、ASP.NETは考慮せずに、
Windowsアプリのみを想定しているのでしょうか?
>>2
の「前スレの流れ」はASP.NETとWindowsアプリの区別は無いのでしょうか

143NAME IS NULL:2009/04/09(木) 00:46:51 ID:???
状況により使い分ける。
例えば接続型のDataReaderの方がパフォーマンスは良い。
しかし、順方向への読取専用にしか使えないので、
例えばGridViewのページングを使いたいような場合には向かない(できない)。
144NAME IS NULL:2009/04/09(木) 01:14:14 ID:???
>>142
すぐ上で接続型と非接続型に対する議論が白熱してるw
で、俺はjavaはわからんのだが、javaと同じような非接続の実装ってのはどういうもんなんだろ
>>131なんかが言うには、javaだとDataReader使うようなスタイルになるみたいだけど、
それなら分類的にはどっちかっていうと接続型だと思うが...

まあ、少なくともDB周りにおいてはその区別は重要ではないという流れではあると思う

WebアプリかWindowsアプリかについては、俺の私的意見ではあるが、ADO.NETは
Webアプリ的思考をWindowsアプリにも適用する方向に向かって進んできたので
Webアプリにおいてはあまりその違いを重要視する必要がないと思う

Webアプリなら特性上、楽観的ロックでコネクションは即時解放ってスタイルにならざるをえないと思うが
まあ普通にADO.NET使って作ってればそうなってると思うw
145NAME IS NULL:2009/04/09(木) 07:25:46 ID:???
>>142
文面からすると、「javaは非接続型で実装するスタイルがメインである」と
読み取れるのだが、JDBCの場合、テーブルデータをローカルメモリに
保存する機能のクラスはないのだから、「javaは接続型」だと思うのだが。

javaであなたが実際に実装する際に使っているライブラリやクラス名を
教えて欲しい。(O/Rマッピングあたりなのかな?)

このあたりがはっきりしないとレスもしようが無いので。
146NAME IS NULL:2009/04/09(木) 15:59:01 ID:???
ADO.NET単体では
MDBファイルの新規作成はできないのでしょうか?

COMを使えばできるのは解ってます。
147NAME IS NULL:2009/04/09(木) 19:58:32 ID:???
ADOの時代からADOX使わないと無理だったんで、無理だと思う
ADO.NETはあくまでも既存のDBに接続するためのものってことだな
148142:2009/04/09(木) 21:05:04 ID:???
>>144
>>145
142です。ああああ、ごめんなさい。
ご指摘の通り、javaは「接続型」です。記入間違いです。
混乱させてしまいました。

>>143
ですよね。
GridViewのページングのためしか、「非接続型」は使えないきがする。

>>144
>すぐ上で接続型と非接続型に対する議論
この論議がWindowsアプリを前提にしているのかなぁ?
と思ったので質問しました。
>Webアプリなら特性上、楽観的ロックでコネクションは即時解放ってスタイル
ですよね。そうかなと思ってたので、安心しました。

>>145
ちなみにjavaのDB処理は、DbUtils好きです。
O/Rマッピングは、わかりにくいのであまり好きじゃありません。

今回のASP.NETの開発は、基本は「接続型」で
GridViewのページング機能を使うなら「非接続型」使用します。
ありがとうございました。
149NAME IS NULL:2009/04/10(金) 07:59:01 ID:???
>>146
話の整理をする意味合いでの意見だが、
ファイル操作はADO.NETの範囲ではない。
150NAME IS NULL:2009/04/10(金) 16:34:35 ID:???
>>149
MDBファイルの新規作成を、ファイル操作って言っちゃうと
ちょっと議論がずれるとおもうぞ
MDBファイルの新規作成=JetでのDBの新規作成 って意味だと思うんだ

Jetが(実際は無理なんだが)create databaseとかのSQLでMDB作れるなら、
ADO.NETからSQL発行すれば可能なんだろうけど、その場合でも
それはADO.NETの守備範囲ではないと思うんだ
151NAME IS NULL:2009/04/10(金) 17:54:13 ID:???
MDBファイルの作成であれば、ファイル操作でやるしかないでしょ。
ひな型となるものを作っておいてコピーするとか。
そもそもMDBは、それに接続してDB作成とかいう概念がないはず。

DB が SQL Server であれば、作成は可能だが。
http://support.microsoft.com/kb/305079/ja
152NAME IS NULL:2009/04/10(金) 20:44:16 ID:???
>>151
ADOX使えばできるだろうという話はまあ置いといて

ファイル操作がADO.NETの範囲外なのは当然なんだよ
ただ、MDBの新規作成は、元来はファイル操作じゃなくてDBMS操作だろう、ってことだ
>>150は、DBMS操作は(たとえSQL発行で実現できたとしても)ADO.NETの範囲外だろう、と主張してる
153NAME IS NULL:2009/04/11(土) 14:11:27 ID:???
俺なりのjava(JDBC)と.NET(ADO.NET)の比較
・接続方式のプログラミングは、概念は同じ。
 DBに接続して、SELECTして・・・
・非接続方式はADO.NETだけ
 格納用に配列を準備してそれに代入して・・・という処理を
 書かなくて済む分、DataTableは便利。
・ADO.NETは選択肢が無い
 O/Rマッピングあたりになると、javaは選択肢がたくさんあるが、
 .NETだと、LINQしかない。
 これはプロジェクトの上でメリットにもデメリットにもなりうる。
154NAME IS NULL:2009/04/11(土) 14:31:19 ID:???
他と比較しながら、ADO.NETについて見てみるのもいいかも。

PHPでのDB接続の場合は、取得結果を連想配列に格納となっているようだ。
ただし、接続先のDBが限定されてるようだけど。
ADO.NETのDataTableは連想配列ではなかったり、それに簡単に格納出来なかったり
する部分が不便だけど、PHPみたいに接続DBの種類を限定はしていないところは
良いところだな。

mysql_fetch_array
http://bg.pi-ppi.com/page/n01/000152.html
155NAME IS NULL:2009/04/11(土) 15:51:23 ID:???
>>153
.netもnhibernateとかs2dao.netとかあるだろ
javaの移植だけど
156NAME IS NULL:2009/04/11(土) 16:48:11 ID:???
>>155
すまん。今まで移植がされてたなんて全く知らなかった。
だが、一つ勉強になった。
http://www.atmarkit.co.jp/fdotnet/special/ormap01/ormap01_01.html
157NAME IS NULL:2009/04/11(土) 21:01:51 ID:???
俺も知らんかった
158NAME IS NULL:2009/04/11(土) 21:27:38 ID:???
俺も知らなかったけど知っていたフリをする。
159NAME IS NULL:2009/04/12(日) 13:36:26 ID:UP5C1RP7
ibatis も忘れんでくれーーー
#まだ使ったこt無いんだが
160NAME IS NULL:2009/04/12(日) 16:39:24 ID:UP5C1RP7
>>154
DBI::DBDだとみんな、連想配列だと思うのだが
161NAME IS NULL:2009/04/13(月) 07:36:37 ID:???
ちょっと念のために一つ確認。
現状では、ADO.NETでDB接続し、テーブルデータ取得時に、
一発で連想配列に格納する事って出来ないよね?
DataTableは連想配列じゃないし。
162NAME IS NULL:2009/04/13(月) 11:20:08 ID:???
連想配列のように扱うこともできると思うけど、それじゃいかんの?
163NAME IS NULL:2009/04/14(火) 14:37:12 ID:???
DB接続に関するモジュールが提供する機能となると、このくらいで終わり
なのかなぁ?複数テーブルをJOINした場合の更新のサポートとか、
ちょっと複雑なクエリを使って集計する必要がある場合、簡単に
抽出が出来るとかそういうのがあってもよさそうに思うんだけど。
164NAME IS NULL:2009/04/14(火) 15:34:17 ID:BZsP47Lx
>>複数テーブルをJOINした場合の更新のサポート
複数テーブルのテーブルロックになっていいの?
#行ロックじゃなくって

>>ちょっと複雑なクエリを使って集計する必要がある場合
複雑なクエリで集計->複雑な条件で抽出&集計 になると思うのだが?
165NAME IS NULL:2009/04/14(火) 16:32:38 ID:???
複数テーブルの更新も簡単な抽出もできるよ
166NAME IS NULL:2009/04/15(水) 21:19:49 ID:???
>>165
SQL文を工夫する以外の方法である?
167NAME IS NULL:2009/04/23(木) 18:02:43 ID:???
なんか、急に書き込みがなくなったな・・・w
168NAME IS NULL:2009/04/24(金) 02:27:01 ID:???
大量データのINSERTについて質問なんですが、10万件のデータをなるべく早く生成したく、下記のようなコードで実行してみましたが
想像を超えるほどに遅くかなり間がかかってしまいます。

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で行っています。
169NAME IS NULL:2009/04/24(金) 03:12:39 ID:???
10万回もCreateCommandして
10万回もパラメータ生成してりゃ遅くもなるわな
170NAME IS NULL:2009/04/24(金) 03:22:08 ID:???
そうなの?
171NAME IS NULL:2009/04/24(金) 06:44:30 ID:???
そうだろw
172NAME IS NULL:2009/04/24(金) 08:04:39 ID:???
そうだっけ?
173NAME IS NULL:2009/04/24(金) 08:54:54 ID:???
そうはおもえないな
174NAME IS NULL:2009/04/24(金) 12:08:16 ID:???
そうともいえないんじゃない?
175NAME IS NULL:2009/04/24(金) 18:20:53 ID:???
で、つまりどうしろと?
176NAME IS NULL:2009/04/24(金) 18:40:21 ID:???
>>175
CreateCommandとパラメータ生成をforの外にだせ
つか、本気で言われないとわからないならプログラマ向いてないぞ

まあ、それでも遅いってなら、バルクインサート検討しないと無理かも知れん
177NAME IS NULL:2009/04/24(金) 21:55:12 ID:???
>>176
まじで?じゃあコード書いてみなよ
できるもんならね!

                    ふふん

      / ̄ ̄ ヽ,          / ̄ ̄ ヽ,           / ̄ ̄ ヽ,
    /        ',       /        ',        /        ',
    {0}  /¨`ヽ {0}       {0}  /¨`ヽ {0}       {0}  /¨`ヽ {0}
    l   トェェェイ  ',       l   トェェェイ  ',       l   トェェェイ  ',
    ノ   `ー'′  ',       ノ   `ー'′  ',       ノ   `ー'′  ',
   /,, -ー 、  , -‐ 、    /,, -ー 、  , -‐ 、    /,, -ー 、  , -‐ 、
  (   , -‐ '"        (   , -‐ '"        (   , -‐ '"     )))
   `;ー" ` ー- -ー;'"    `;ー" ` ー- -ー;'"    `;ー" ` ー- -ー;'"
   l          l      l          l     l          l
178NAME IS NULL:2009/04/25(土) 06:43:46 ID:???
なんかくだらん煽りがおおいのは新年度だからか?

>>176 実験した VS2008+SQL2000
ベンチの公開は禁止されてたような気がするので具体的な数字は伏せる
処理時間で96%ぐらいになった。つまり4%ぐらい高速化された

思ったより差が出なかった

>>168は想像以上に遅かったといっているが、
俺の想像以上に早かったw

パラメタにサイズ設定して、objCommand.Prepare追加したらさらに数%早くはなったが
10秒程度のオーダーで数%だから、誤差に近いかもしれんな
179NAME IS NULL:2009/04/25(土) 14:13:50 ID:???
偉そうに間違えるのってかっこいいね。 あこがれる。
180NAME IS NULL:2009/04/25(土) 16:41:55 ID:???
もっと速くってことなら
せっかく2008使ってるんだし
ストアドとSQL CLR使ってみれば?
かなり速くなると思うけど
181178:2009/04/25(土) 17:26:46 ID:???
俺は168じゃないぞ。念のため

>>179
少なくとも確実に数%早くなってるぞ。間違ってるとはいえない
つか役に立たんレスとか煽りとかいらない

>>180
10万回CreateCommandした場合とPrepareした場合とで数%の違いなんで、
ストアドにしても大差はないと予想した。SQLの解析時間は数%ってことだから
処理時間のほとんどはinsert文の実行時間なんじゃないかな
うちの環境ではSQL CLRは試せないが、バルクでインサートしないと
結果は大差ないと予想。だれかモノ好きが実験してくれw
まあ、ADO.NETは結構速いと俺は思ったぞ。SQL Serverに限ればかも知れんが
182NAME IS NULL:2009/04/25(土) 17:27:01 ID:???
>>180
ストアドとはストアードプロシージャーのことでしょうか?
あまりよくわからないので、多少は使い慣れたC#から、とおもったのですが。

お騒がせしましたが、たかが10万件ですし、手入力で解決しました。
183NAME IS NULL:2009/04/25(土) 17:29:43 ID:???
>>181
つか役に立たんレスとか煽りとかいらないからまじで
184NAME IS NULL:2009/05/11(月) 15:01:19 ID:???
保守しておきます。
185NAME IS NULL:2009/05/11(月) 15:04:36 ID:???
ありがとう
186NAME IS NULL:2009/05/11(月) 19:33:23 ID:???
いいってことよ
187NAME IS NULL:2009/05/16(土) 00:18:47 ID:???
質問です。
表示専用にしたDataGridViewに表示中のDataTableに対して行を追加するのに、BindingSource.AddNew()とEndEdit()で
追加して、ソートしてあると追加行は自動的にしかるべき位置に並べ替えられますが、
その後、追加した行が選択されず、その1行下が選択されてしまいます。
ちなみに、最下行に新規行が追加されるときだけは新規行が選択されます。
BindingSource.Position自体が1行下を指す値になっていました。
PositionChangedイベントを見てみると、EndEdit()後に一度Positionが
新規行の値になり、直後に1行下に変わって、都合イベントが2回起こります。
DataTableを型指定しない最小限のもので試したり、DataGridやDataViewを
使っても同じ現象が出ます。どうも、CurrencyManagerからして
そのような動きをしているようです。
選択行が追加前と変化しないとかならともかく、微妙に1行ずれとかだと
困ってしまいます。なんとかならんでしょうか。
188NAME IS NULL:2009/05/16(土) 17:28:43 ID:???
>>187
俺はこれまで、そういった問題に直面したことはないが、
そこまで解決がうまく出来ない場合は、追加する前にあらかじめ
主キーとなるデータをローカル変数に保存しておいて、
あとで選択し直すという方法をとってみたらどうかなと
思うが、そのあたりは試してみたのかな?
189NAME IS NULL:2009/05/28(木) 08:28:16 ID:9j4YcJly

データセットのデザイナ、便利で助かっているのですが、
実際のテーブルの定義を変更した時にどうやってデータセットのほうに
反映させればいいのかわかりません。

テーブルの列の追加や削除、NOT NULL の変更などが発生した際
皆さんはどのように対応していますか?
190NAME IS NULL:2009/05/28(木) 11:21:50 ID:gxKAwuxS
>>189
データセット作り直すしかないんじゃないかと>定義ファイル作って差替え
#それが嫌で使ってない
191NAME IS NULL:2009/05/28(木) 14:31:29 ID:???
型指定されたデータセットって半分使い捨ての気分で
使わないとイライラとすることが多いように思う。
コーディングが楽になるとか、いくつかメリットはあるけれど。
だから、かなり単純なテーブルのデータを読み込む場合など
の時にしか使わないな。俺は。
192NAME IS NULL:2009/05/29(金) 12:07:49 ID:j7MbTSD8
>>189
たとえばテーブルに新たに列を追加した場合、
TableAdapter構成ウィザードのクエリビルダで
追加した列を選択して再構成すれば大丈夫みたい。
193NAME IS NULL:2009/05/29(金) 23:56:43 ID:UxJIKZRF
>>182
ストアド苦手っていうプログラマでろくなヤツ見たことないな。
そういうやつに限ってメンテしづらいし、
後々、致命的な性能問題起こすプログラム書きやがる。
194NAME IS NULL:2009/05/30(土) 08:53:43 ID:evhQeNCf
>>29
超亀だけど、あの本読まずに何を読む って気がするんだけど
VB+C#対応だから、お買い得だと思う
195NAME IS NULL:2009/06/02(火) 09:14:47 ID:???
M$の言語を使おうというのならば、公式図書とMSDNはおさえとかないと
いけない。その道を通らずに習得するのは無理でしょ。
最初からコーダー目指すのならば、「ここはこう書くんだ」みたいな
形式の適当な研修を受けるだけで十分かもしれないが。
196NAME IS NULL:2009/06/04(木) 06:59:44 ID:w05KK/Vp
>>193
まぁ まともなSQLかける奴も少ないけど
#最近 少しはましになったw
197NAME IS NULL:2009/06/06(土) 15:26:45 ID:???
LINQとか、型指定されたDataSetとか、CommandBuilderとか、
SQL文を自分で細かくかかなくても自動生成されるよっていう
のがあるけれど、俺はやはりSQL文を自分で書くスタイルの方が
いいな。このほうがパフォーマンスが大きく変わるわけでも
ないけれど、他の言語(javaやPHPなどADO.NETを使わない場合)
での開発も視野に入れると、ある程度似たようなコーディング
スタイルの方がいいと思うから。
198NAME IS NULL:2009/06/08(月) 10:44:11 ID:???
プログラミングMicrosoft ADO.NET2.0 は
MSDNライブラリの内容を書籍にしたような感じだから
紙じゃなくてもいいのなら MSDN ライブラリで十分かもしれん。

MSDNライブラリよりは解説が多い分わかりやすいかもしれんが。
199NAME IS NULL:2009/06/10(水) 13:28:53 ID:4wnEGzyk
リファレンス部はそうだけど、それ以外の部分は
MSDNライブラリを探しながら体系的に見ていく事が
初心者にできるか って事だと思うが
#最低限の知識がないまま、いきなりMSDNライブラリを読む
#というのは、自分的には時間がもったいないと思う
200NAME IS NULL:2009/06/10(水) 20:06:05 ID:???
ReportViewerコントロール用のレポートファイル( .rdlc )のデザイナでの作成方法について色々解説してあるページとか参考書ってないでしょうか。

レポートウィザードで作れるピボットテーブルをベースに色々と追加したい要素があるんですが、どうやりゃ良いのかいまいちわからない。
一応、やりたいことは今年度のピボットテーブルに前年度の合計とか、前年度比とかの行とか列を追加することです。
201NAME IS NULL:2009/06/13(土) 14:01:36 ID:???
MSDNだけで十分といえるには、それなりの前提知識がある場合の話でしょ。
例えば、VB5の開発経験がある人だとVB6の習得にかかる時間は・・・みたいな。
それだけの知識が無い場合は、技術評論社などの一般向け書籍を読み、
ADO.NETの公式文書を読み、MSDNという順序しかないと思う。
202NAME IS NULL:2009/06/13(土) 14:05:15 ID:???
>>200
プログラマー板のVB.NETスレなどに行って相談してみると
いいかもしれない。
ここがスレ違いというわけではないが、情報量が違うから
203NAME IS NULL:2009/06/13(土) 18:18:33 ID:???
>>202
そうですか。
とりあえずVB.NETの質問スレに行ってみます。
204NAME IS NULL:2009/06/15(月) 09:11:39 ID:???
マ板じゃなくて、ム板だったな。。。
すまん
205NAME IS NULL:2009/06/16(火) 19:19:15 ID:???
>>200
レポートデザイナ?でいろいろやるより
出来上がりの形までのストアドを作ったほうが楽かもね
206NAME IS NULL:2009/06/16(火) 22:52:28 ID:???
まぁ確かにそんな気がする。
ただ、前年比みたいなのを混ぜると通貨型と浮動小数点型が混在しちゃうんでどうにかならんかなとか思ったり。
まぁどっちも文字列型に変換してしまうのが手っ取り早いかな。
207NAME IS NULL:2009/06/30(火) 04:51:55 ID:???
すみません、質問いいですか?

ADO.NETはおろかDB初心者です。

現在SQLServer(2005EE)のデータをC#(VS2008PE)にて操作しようと考えています。

SQLServerからアダプター経由でDatasetに読み込み
DataRows.add(hoge)
adapter.update
で追加更新までは出来るようになりました。

ですが、レコードの削除やセル単位の変更のデータベースへの更新が全く判りません。。。

エスパー様、どうか宜しくお願いいたします。
208 [―{}@{}@{}-] NAME IS NULL:2009/06/30(火) 09:18:19 ID:???
>>207
DataRow自体の中身を変更したり削除して
Updateを呼べば普通は何も考えなくても裏でやってくれる
209NAME IS NULL:2009/06/30(火) 12:09:25 ID:???
>>208
それが出来ないんですよ・・・・・

Datasetやアダプターになにか設定が必要なのでしょうか?
追加更新はUPDATEであっけなく出来たのですが・・・
わたし勘違いしてますかね?
Datasetの中のDataRowを削除、変更してUPDATEしようとしているのですが・・・
210 [―{}@{}@{}-] NAME IS NULL:2009/06/30(火) 12:37:24 ID:???
>>209
対象のDataRowのstateが変わってないとか?
そうであれば、処理の仕方が間違っているんでしょう。
adapter.update前の中身を確認して見ては?
211NAME IS NULL:2009/06/30(火) 12:54:55 ID:???
>>210
極意の本に載ってた方法でそれもやりましたが
だめでした・・・・。

なにか根本的におかしい事をやっている気がします。

どこか参考になるサイトをご存じないでしょうか?
212 [―{}@{}@{}-] NAME IS NULL:2009/06/30(火) 12:59:00 ID:???
>>211
ソース
213NAME IS NULL:2009/06/30(火) 13:01:37 ID:???
>>212
ありがとうございます。

今日の夜でもいいですか?

よろしくお願いいたします。
214213:2009/06/30(火) 19:10:57 ID:wdq85xWU
private void button1_Click(object sender , EventArgs e)
{
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⇒失敗
となります。

宜しくお願いします
215213:2009/06/30(火) 19:12:42 ID:wdq85xWU
更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な UpdateCommand が必要です。

例外内容です。
216 [―{}@{}@{}-] NAME IS NULL:2009/07/01(水) 09:04:41 ID:???
>>215
TableAdapterのUpdateCommandが設定されていないか
そこに設定されているSQLがおかしいって事でしょ
DeleteCommandの方も同様
217NAME IS NULL:2009/07/01(水) 10:30:13 ID:???
>>216
おはようございます。

>TableAdapterのUpdateCommandが設定

すみませんが、デザイナ上で行う方法を教えては頂けないでしょうか?
私なりに例外メッセージ等で調べたのですが、全然判りません・・・

よろしくお願い致します。
218NAME IS NULL:2009/07/03(金) 20:00:18 ID:???
>>217
じゃ、プロジェクトファイルをうpってみたらどうかな?
デザイナ上ではすべてが出来るわけでもないしさ
219NAME IS NULL:2009/07/04(土) 11:30:48 ID:???
「ADO.NETはおろかDB初心者です」っていうのならば、
こういうことをやる前に、SQL文について勉強して
おいた方がいいと思う。
SQLがある程度書けるくらいになっておかないと、
概念の理解まで至らないし、これから先もあらゆる
ことでつまづきまくると思う。
220NAME IS NULL:2009/07/21(火) 13:44:37 ID:???
新しいクラスが出てくると、便利な反面、そのルールや使い方を覚えて
習得しなければならないのが欠点だな。
ADO.NETの場合、欠点のみが表に出ている感がするのだが・・・
221NAME IS NULL:2009/07/22(水) 08:13:16 ID:???
次バージョンに期待だなw
222NAME IS NULL:2009/07/24(金) 11:44:07 ID:dt3OdEIg
質問です
SqlServer2005+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()してもやはりエラーが出てしまいます
一体何が原因なのでしょうか?
223NAME IS NULL:2009/07/24(金) 18:30:56 ID:???
TableAdapterが使ってるSQLを確認してみれば?
基本的には1行ずつupdateのSQL投げるはずだから、
Rows[0]のupdate文実行しようとしてRows[1]の元データとダブってるんじゃね

224NAME IS NULL:2009/07/24(金) 20:49:19 ID:???
そもそも主キーカラムに更新なんてかけるもんじゃない。
del/insにするか主キー「以外」のカラムを入れ替えるか。
225NAME IS NULL:2009/07/25(土) 11:14:02 ID:ntHeY4dE
テーブル内のデータをDELETEで削除したあと、新しいデータをINSTALLで入れるプログラムを
書いたんだけど1万近いデータをforで回しながら入れていくとめちゃ時間かかります
なにか高速化する方法はないでしょうか?
226NAME IS NULL:2009/07/25(土) 11:29:02 ID:???
俺も「主キーを更新する」という設計の方に問題があるように思うな。
そのフィールドを入替えする必要性があるのであれば、それとは
別に主キーフィールドを準備するべきだ。
227NAME IS NULL:2009/07/25(土) 11:30:53 ID:???
>>225
いちいちINSTALLしてるから時間がかかるんじゃないの?
228NAME IS NULL:2009/07/25(土) 11:35:26 ID:???
>>225
あなたの言う「めちゃ」の基準がどんなものなのかというものがあるし、
極端な話、コネクションのopen/closeをforの中に入れてしまっている
可能性などもあるので、具体的にどういうプログラムを書いているのか、
現状は何秒かかっているのか、何秒くらいにしたいのか、などを
書かないと話はすすまないんじゃないかな。
229NAME IS NULL:2009/07/25(土) 12:56:30 ID:???
1万件insertするとどうしてもそこそこ時間がかかる。
1000件ごとにコミット、とかで大幅に速くなる可能性はある。
あとはselect/insert1発で出来るような話ならそうするとか
230NAME IS NULL:2009/07/25(土) 13:03:06 ID:QzAHKE4L
データ入れるときの列の指定に列名を文字列で指定してるとか?
231NAME IS NULL:2009/07/26(日) 02:30:21 ID:???
わんくまの人でそのパフォーマンス調べてた人いたな。
1行ずつコミットと複数行コミットともひとつあったな。
232NAME IS NULL:2009/07/26(日) 03:32:51 ID:???
議題は縦持ちと横持ちのお話だけど、パフォーマンス結果は役に立つ。
http://blogs.wankuma.com/ognac/archive/2009/06/14/175205.aspx
233NAME IS NULL:2009/07/28(火) 15:27:24 ID:6RYCaFK/
Decimal型からデータを読み取れない、System.OverflowExceptionが起こる。
(データは8.012345678901234567890123456 .netのdecimal型の有効桁数に収まる)
data provider for sqlserver ×
data provider for ODBC ○ 
234NAME IS NULL:2009/08/18(火) 15:31:48 ID:???
Visual Studioのデータベースプロジェクトで、
テーブルなどを生成するsqlや実際のMDFを生成することは出来ます。
でも、初期データのレコードをそれに入れるにはどうしたら良いのでしょうか?

単体テスト用の「データ生成計画」を使用すれば、
ランダムな値でレコードを埋めることは可能ですが、
任意の値で作った数レコードを設定する方法はあるのでしょうか?

管理用テーブルに初期レコードを入れたい状況は結構あると思うのですが。
235NAME IS NULL:2009/08/18(火) 15:36:41 ID:???
普通にsql走らせればええやん
236NAME IS NULL:2009/08/18(火) 15:40:22 ID:???
いや、まぁ、そう言われるとそうなんですけれど、
何か美しい方法があるのかなと。

仮にカラム名とかスキーマビューから変更したとき、
初期データスクリプトも自動的にリファクタされたいじゃないですか。
237NAME IS NULL:2009/08/18(火) 19:17:21 ID:???
たいていの場合、誰かがツール作ってるな。
開発初期で余裕がある時の息抜きというか腕ならしというかで。

たまに「今後もずっと使える」とかいうのを作るヤツもいるが、
設定項目が多くなりすぎて自前で書いた方が速かったり、
ついでの要望の多さにヘソ曲げて放置になったりしてる。
238234:2009/08/19(水) 09:09:36 ID:???
どうやら、データベースプロジェクトの場合は、
プロジェクトの中のScripts\Post-Deploymentディレクトリ辺りに
初期値をInsertするsqlファイルをいくつでも置いておき、
同じディレクトリのScript.PostDeployment.sqlが最初に実行されるので、
:r .\DefaultValuesUsers.sql
のような感じで、それらを呼び出すように書いておくようです。

と、Script.PostDeployment.sqlの最初のコメントにほんの少し書かれてます。
データベースプロジェクトで「配置」を実行したときに何回でも実行されるので、
複数回挿入されることが無いように、
IF NOT EXISTS(SELECT * FROM User WHERE UserID = @User1ID)
のような感じでチェックを入れとく必要があります。
239名無しさん@そうだ選挙に行こう:2009/08/30(日) 18:59:07 ID:fgXfO5+T
http://msdn.microsoft.com/ja-jp/library/ms187993.aspx
にて
image型は将来削除される予定である、との記述があるため
DDL の image の部分を varbinary(max) に置き換えたのですが

ADO.NET での
new SqlParameter("IMAGE", SqlDbType.Image);
のような記述を
SqlDbType.VarBinary で max 指定することって出来るのでしょうか?
System.Data.SqlTypes.SqlBinary は他の型と違って
MaxValue のフィールドが存在しなかったです。。。
240NAME IS NULL:2009/09/08(火) 18:28:11 ID:???
質問いいですか?

現在OracleのデータベースをC#から弄ろうとしているのですが
Oracleが9iだった場合ODP.netも9iじゃないといけないのでしょうか?(11gじゃだめなんですかね)

すれ違いかもしれませんが、どなたか宜しくお願いいたします。
241NAME IS NULL:2009/09/08(火) 22:28:24 ID:???
OLEDBでOK
242NAME IS NULL:2009/09/08(火) 22:47:03 ID:???
>>240
http://www.oracle.com/technology/global/jp/software/tech/windows/odtvnet/sysreq/111062.html

接続可能なOracle Database
Oracle9i Database Release 2 以降
243NAME IS NULL:2009/09/09(水) 18:25:43 ID:???
>>241
>>242
ご親切にありがとうございました。返事が遅れてすみません。

やはりOLEDBで行うことにしました。

ODP.netで繋ぐメリットって具体的になんなんですかね?
244NAME IS NULL:2009/09/09(水) 20:01:25 ID:???
色々特化してるところじゃね?型とかも含めて
245NAME IS NULL:2009/09/09(水) 21:00:32 ID:???
>>243
どっちでもいいならODPのがいいと思うけど・・・
246NAME IS NULL:2009/09/09(水) 21:32:14 ID:???
>>243
Oracle => OLEDB => .NET Framework Data Provider for OLEDB
Oracle => Oracle Data Provider for .NET

専用ドライバの方がダイレクトに接続できる分効率的
247NAME IS NULL:2009/09/12(土) 20:59:53 ID:10ipJbo0
cmd.CommandText = "UPDATE テーブル SET 完了日 = GETDATE() WHERE 設定 IN (@PARAMS)"
cmd.Parameters.AddWithValue("@PARAMS", new int[]{1,2,3});

こんなのがすごくやりたいです・・・。
248NAME IS NULL:2009/09/12(土) 21:20:07 ID:???
>>247
SQL Server 2008からテーブル値パラメータってのがあるから、それ使えば?
249NAME IS NULL:2009/09/13(日) 11:54:45 ID:CN3ToSfV
>>248
ストアドですか・・・。でも接続先はmdb(2000)。。。(死)
250NAME IS NULL:2009/09/13(日) 12:19:48 ID:???
パラメータクエリーは、Access 相手でもできるだろが。
251NAME IS NULL:2009/09/13(日) 17:01:20 ID:???
mdbは"@"ではないけどね。
252NAME IS NULL:2009/09/13(日) 20:54:58 ID:???
mdbにはgetdate()もなかったとおもったがな
対象をちゃんと書かない>>247が悪い
253NAME IS NULL:2009/09/19(土) 06:35:52 ID:???
コピペですが・・・・・
-----------------------------------------------------

深夜のメンテナンス作業で眠くて眠くて、ユーザーの伝票明細テーブルを間違ってTRUNCATEした。
ROLLBACKも効かない。
あせってArcserve開いてテーブルを戻そうとする・・・ログウィンドウを見ると、
バックアップバッチは数ヶ月前から停止したままだった。

頭が真っ白になった。

IDCを出て深夜の自席に戻って、机の中の大事なものをかきあつめてかばんに詰めた。
社員証を課長の机の上に置き、会社を出て、アパートに戻る。
保険証、パスポート、前の年に死んだ愛犬の写真を持ち、始発にあわせて家を出る。
携帯が鳴り始める。何度も何度も何度も。空港につくころには着信が100回を超えた。
電池を抜き、俺は北海道行きの飛行機に乗った。
逃げるなら、なんとなく北、というイメージがあった。

それから3年無為な生活をし、ほとぼりが冷めたころ、北海道の小さな
ソフトウェア開発会社に就職した。
経験を買われて、すぐにプロマネになる。
そして、孫請けながら大きなプロジェクトに参加することになり、
キックオフミーティングのために東京へ。
発注元とともに汐留で会議に参加する。

・・・会議室には、俺が逃げ出した会社の部長と、課長がいた・・・
ふたりとも、会議のあいだずっと、顔を真っ赤にして俺を睨んでいた・・・
こみあげてくる胃痛と嘔吐感に耐え、会議が終わると同時に俺は会議室から逃げ出した・・・

それが、先週の金曜日のこと・・・死にたい・・・
254NAME IS NULL:2009/09/20(日) 11:53:01 ID:???
皆はTableAdapter使ってるのか?
使ってみたけどなんかいまいちじゃ〜
255NAME IS NULL:2009/09/20(日) 20:43:01 ID:???
>>254
俺使ってた
型付DataRowは結構便利だった
LINQ出たから過去形
256NAME IS NULL:2009/09/20(日) 23:41:24 ID:???
>>254
使ってる。
257NAME IS NULL:2009/09/21(月) 10:17:43 ID:???
TableAdapterもLINQも過渡的な技術で直ぐに過去のものとなる。
やはり、ExecuteReader、ExecuteNonQuery が最強ですな
258NAME IS NULL:2009/09/21(月) 11:06:02 ID:???
TableAdapterは、紹介見たところで、便利だろうなとは思ったが、
使わなかった。なるべく統一性のある方法でやりたいという考え
でやっているので、俺も>>257のようなやり方でやっている。
LINQは、過去に使いこなされたものを真似して作ったという系統では
なく、新しいことをやろうという系統のことなので、言語仕様や
書き方はしばらくの間は変わりそうな予感がするので、手をつけないでいる。
259NAME IS NULL:2009/09/21(月) 11:10:21 ID:???
TableAdapterもLINQで読み込みだけさせて更新はExecuteNonQueryで
やるのもありかと。
260NAME IS NULL:2009/09/21(月) 11:13:43 ID:???
TableAdapterやLINQで
261NAME IS NULL:2009/09/21(月) 13:39:27 ID:???
>>257
キャストが要らなくなるならそれでもいいがね
262NAME IS NULL:2009/09/21(月) 14:51:02 ID:???
>>261
キャストはIDEが教えてくれるので無問題
263NAME IS NULL:2009/09/21(月) 18:10:27 ID:???
>>262
だが列名のスペルミスまでは指摘してくれない
264NAME IS NULL:2009/09/21(月) 21:10:10 ID:???
>>263
テストくらいするだろ〜
TableAdapterでもプロパティ名間違えると駄目だし。
265NAME IS NULL:2009/09/21(月) 23:42:51 ID:???
TableAdapterなんてDMLとConnectionをまとめただけのようなもんだろ。
266NAME IS NULL:2009/09/23(水) 12:41:30 ID:4tX5mSUz
ExecuteNonQueryの結果をそのままTableAdapterにつっこむのに便利
LOOPでSQL吐く代わりに、オンメモリでアクセスしたくなるときは便利やん
267NAME IS NULL:2009/09/23(水) 14:23:27 ID:???
>>266
ExecuteNonQuery?
268NAME IS NULL:2009/09/24(木) 11:35:19 ID:gNkdYfWL
すまん 寝ぼけてた>>267
269NAME IS NULL:2009/10/06(火) 20:27:30 ID:???
テーブルロックについて基本的なことを教えてください。
Update とか Merge を投げるクライアントアプリを作ったのですが、
現状トランザクションではなく、単にSQL文を発行しているだけの状態です。
SQL文投げる前にテーブルロックをかける必要はあるのでしょうか?
そもそも、トランザクションを使わないDB操作にテーブルロックができるのか
疑問なのですが。
270NAME IS NULL:2009/10/06(火) 20:46:13 ID:???
>>269
ロックにもいろいろある
楽観的ロックで検索してみろ
271NAME IS NULL:2009/10/06(火) 22:36:30 ID:???
オレは何時でも超楽観的ロック。
つまり、ロックなど一切しないw
272NAME IS NULL:2009/10/07(水) 20:15:21 ID:???
>>270
だから、馬鹿のゴミレスは不要だって。
273NAME IS NULL:2009/10/09(金) 01:01:52 ID:???
>>269
まず対象のDBMSを特定しないと確実な話はできないんだが
1文のSQLは、その1文だけのトランザクションだと考えていい

テーブルロックをかける必要があるかどうかは、SQLが1文かどうかにかかわらない
その処理でテーブルロックが必要ならかければいい
まあ俺にはSQL1文で明示的にテーブルロックする必要がある処理は思いつかないが
274NAME IS NULL:2009/10/11(日) 11:39:23 ID:???
教えてください。
スレ違いだったらすみません。

今度、.net の環境で DB を扱うプログラムを書きます。
基本的にはクライアント側か、クライアントと DB サーバの仲介をする部分を扱うことになります。

DB に関することは教科書レベルでは知っているつもりなのですが、
たとえば効率的な SQL の書き方とか、とにかく実戦レベルで気をつけなければならないことなどは
経験がないためよくわかっていません。

こんな人間が読むのに最適な本をご存知でしたら、紹介をお願いできないでしょうか。
よろしくお願いします。
275NAME IS NULL:2009/10/11(日) 13:15:44 ID:???
プログラミングADO.NET 2.0
現場で使えるSQL
276NAME IS NULL:2009/10/11(日) 20:23:28 ID:???
SqlDataSource の ConnectionString とか SelectCommand をプログラムで動的に
変更することはできるのでしょうか?
GridViewにDBを貼り付けて表示させるときに、SqlDataSourceをウィザードで定義
する方法はあるのですが、その設定をプログラムで動的に変更する方法は無いかと
調べているところです。
ご存知の方いましたら教えてください。
277NAME IS NULL:2009/10/11(日) 22:15:46 ID:???
>>275
ありがとうございます。
助かります。
278NAME IS NULL:2009/10/12(月) 01:13:40 ID:???
>>276
つPage_Load()
つか.aspxのソースみれ
279NAME IS NULL:2009/10/12(月) 12:20:11 ID:???
またスキルの無い馬鹿がゴミレスしてるわ。
280NAME IS NULL:2009/10/19(月) 20:23:19 ID:???
>>276
>SqlDataSource の ConnectionString とか SelectCommand をプログラムで動的に
>変更することはできるのでしょうか?

できる。

>GridViewにDBを貼り付けて表示させるときに、SqlDataSourceをウィザードで定義
>する方法はあるのですが、その設定をプログラムで動的に変更する方法は無いかと
>調べているところです。
>ご存知の方いましたら教えてください。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.datasource%28VS.80%29.aspx
281NAME IS NULL:2009/10/20(火) 00:47:31 ID:???
visual studio2008です。

mysqlで、データソース→新しいデータソースの追加→データソースの種類を選択
→データベース→アプリケーションがデータベースへ接続に使用するデータ接続

ここで正確に入れても次のデータオブジェクトの選択で
「選択したデータベースが新しいか、オブジェクトを含んでいません」
になる。

サーバーエクスプローラーのデータ接続では、普通につなげて、中身も見える。
同じように設定しているのだけど、何で差がつくのだろう?

質問する場所違ってたら誘導ください。よろしくお願いいたします。
282281:2009/10/20(火) 00:50:25 ID:???
ちなみに、デザイナで、データセットを編集
を使って、サーバーエクスプローラーのをD&Dすれば普通には使える。

ただ、余計に手間がかかる理由が不明。
283NAME IS NULL:2009/10/21(水) 03:55:41 ID:???
DataAdapterでFillしたときに、関連する子テーブルも自動でFillされるんだな。
便利だけど動作が把握し切れん・・・
284NAME IS NULL:2009/10/22(木) 21:48:37 ID:???
>>280
GridViewの質問だよ。DataGridViewじゃないよ。
285NAME IS NULL:2009/10/26(月) 07:44:18 ID:???
>>283
便利機能のライブラリって、必ずそういう事がつきまとうよな。
で、結局は従来からの面倒だが非常に単純なやり方に落ち着いたりする・・・w
286NAME IS NULL:2009/10/28(水) 22:26:08 ID:???
Accessのフォームは、非連結フォームに落ち着くよな。
みたいなw
287NAME IS NULL:2009/11/13(金) 21:46:16 ID:???
DBから、DataTableに読み込んだテーブルがやたらとでかくて、
そのクライアントPCのスペック(メモリ)を超えている場合は、
ADO.NETの範疇でストップをかけることが出来たりするのでしょうか?
(DataTableのあるプロパティの値をこうしてたら途中までで自動で
止めるなどの機能はあるのでしょうか)
それはVB.NETやOSの範疇だったりするのかな?
288NAME IS NULL:2009/11/13(金) 21:56:34 ID:???
途中でストップはないんじゃないの?
あらかじめデータが巨大になることが分かっているなら
select に where で条件を付けることを必須にするとか、アプリ側の
対処になるような気がする
289NAME IS NULL:2009/11/13(金) 22:07:12 ID:???
>>288
レスありがとうございます。
テーブルの操作が複雑な場合、サーバやネットワークの負荷を抑える為に、
処理の途中で、一時保存という形でローカルPCにmdbファイルという形で
保存しておいて、それを処理していくというものを作ろうとしたのですが、
その場合、mdbファイルに保存されたテーブルを処理する過程の部分は、
なるべくデータを少なく読み取るように工夫をする事で対処出来ますが、
サーバのテーブルをローカルへコピーする過程の部分で、テーブルが
大きすぎる場合は大丈夫なのかなとか思ったのです。

主キーが無いテーブルの場合は、途中まで読み込んで、クリアして、
また続きからとかの処理は無理ですよね?
290NAME IS NULL:2009/11/14(土) 19:37:45 ID:???
>>287
俺は使ったこと無いので詳細はわからんが

DataAatapterのFillに、
Fill(DataSet, String, IDataReader, Int32, Int32)
ってのがある

これが開始位置と最大行数指定できるらしい
これでなんとかなるんじゃないかな
291NAME IS NULL:2009/11/14(土) 20:27:43 ID:???
>>290
ありがとうございます。早速詳細を調べてみます。
292NAME IS NULL:2009/11/28(土) 06:51:59 ID:???
>>289
その場合だと、DataTableを使わずReaderでループまわして、
直接MDBへ書き込んだ方が効率よくない?
293NAME IS NULL:2009/11/28(土) 07:57:30 ID:???
>>292
その手がありましたね。ADO.NET使いこなせてなかったので
そこまで頭が回っていませんでした。ありがとうございます。
294NAME IS NULL:2009/12/03(木) 17:36:18 ID:???
現在VB.NET2005にて
データベースの接続及びSQL文発行を行う
DLLを作成しており、
接続には『SqlDataReader』を使用しています。

Transactionを指定しない場合に
排他制御がどのように行われているのか、がわかりません。
一切排他が行われないのでしょうか?

また、排他制御を実装する場合はどのようにすれば良いのでしょうか?
行いたい制御としては、
@データ取得中(SELECT)にデータ更新を抑止する
Aデータ更新中(INSERT/UPDATE/DELETE)にはデータの取得/更新を抑止する 
です。
295NAME IS NULL:2009/12/03(木) 20:09:42 ID:???
>>294
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されたら困る場合、あるいは性能を意識する場合など
その場合の記述方法はデータベースの入門書を読んで勉強してくれ
296NAME IS NULL:2009/12/12(土) 04:31:41 ID:kLyx5gG9
すみません、質問いいですか?環境はVS2008pro C# SQLServer2005EEです。
SQL分でLIKE抽出するときなのですが、%っていうのは「なくても」or「何が何文字あっても」って感じですか?
ワイルドカード文字数を指定してLIKE抽出したい場合*を使うのでしょうか?
又、*は「とりあえず何らかの文字が1文字以上ある」なのでしょうか?
やりたいことは (0は何らかの数字/A,Bはアルファベットが入ります)
000A000
000B000
000A000B
000B000A
の中から4文字目にBがくるものだけ抽出したいのです。
LIKE %B% では000A000Bも拾ってしまいます。
この場合*B*でいいのでしょうか?
(正規表現も試しましたがかなり遅い感じを受けましたので出来れば避けたいです)
よろしくお願いいたします。
297NAME IS NULL:2009/12/12(土) 08:34:37 ID:???
>296
http://msdn.microsoft.com/ja-jp/library/ms179859(SQL.90).aspx
msdnぐらい読もうな。
298NAME IS NULL:2009/12/12(土) 11:59:02 ID:kLyx5gG9
>>297
ありがとうございました!

一文字ワイルドカードとして_を使っては見たのですが
まったく意図する結果が得られなかったので*なのかな?と思っていました。

LIKEのターゲットがCHAR(8)なのでこれが原因みたいですね。
299NAME IS NULL:2009/12/12(土) 20:57:00 ID:???
馬鹿は使うなってマジで・・・
300NAME IS NULL:2009/12/12(土) 22:59:47 ID:???
substring
つーかSQLスレで聞け
301NAME IS NULL:2009/12/12(土) 23:20:41 ID:kLyx5gG9
以下のスレから誘導されてきました。
http://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%ではまるで抽出できませんでした
302NAME IS NULL:2009/12/12(土) 23:22:03 ID:kLyx5gG9
だぁっ!!すみません。誤爆しました。
303NAME IS NULL:2010/01/11(月) 00:38:34 ID:???
LINQ使えば、もうADO.NETは不要という時代になってきたのかな・・・
304NAME IS NULL:2010/01/12(火) 00:41:27 ID:???
頑張ってLinq使ってるけど一長一短て感じだなー。
補完的に使うと便利だけど完全にADO.NETを置き換えられるか、つーと色々微妙。
取得結果を1カラムずつループ、とか出来ないし。
305NAME IS NULL:2010/01/12(火) 03:06:20 ID:???
Linq to SQLもEntity Frameworkも基本的にORMだから、
他のORMと同じような長所と短所を持っている。
完全な代替にはならない。
306NAME IS NULL:2010/01/25(月) 17:41:17 ID: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]%'
307NAME IS NULL:2010/01/25(月) 22:28:11 ID:???
>>306
System.Data.SqlClient.qlCommandでは2)は1)と同じ動作になる。
前提条件や再現するソースくらい出しなよ。
308NAME IS NULL:2010/01/25(月) 23:24:47 ID:???
どうせOLEDBとかODBCでやってんだろ。
309NAME IS NULL:2010/01/27(水) 07:39:54 ID:???
likeの後の文字列が途中で切れてると神の啓示があったぞ
310306:2010/02/01(月) 12:22:20 ID:1OwJFp6O
>>307-309
レス頂き有り難う御座います。
また、中途半端な情報しか出せずに申し訳ありません。

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
パラメータ文字列長に上限値が存在するということでしょうか?
311NAME IS NULL:2010/02/01(月) 23:48:53 ID:???
本当に調査したいのならSQLServreProfilerでどんなSQLが発行されたか調べればいい。
312NAME IS NULL:2010/02/02(火) 08:14:03 ID:???
つか最低限のコード晒せよ
話はそれからだ
313306:2010/02/02(火) 18:10:41 ID:QBgQPh1C
>>311,312さまレス有り難う御座います。

306で御座います。原因がわかりました。
結論から言えば、309様の神のお告げのとおりで御座いました。

テーブルのフィールドの型がchar(16)で定義されているため、
デザイナでコード生成をすると対応するテーブルアダプタ\コマンド\パラメータの型も
char(16)として扱ってしまい、結果として、意図したパラメータが入力されなくなっておりました。

その為、like演算子を用いるパラメータクラスのプロパティ(ProvideType)を
Varchar型に変更することで解決することが確認できました。

>>311さま
実行されたSqlをトレースするソフトがあるなんて知りませんでしたw
同ツールを用いることで、解決にこぎつけました。

>>その他の皆様
私自身DBをよくわかっていないため、的確な情報が出せずに、申し訳ありません。
質問に反応して頂き有り難う御座いました。助かりました!!
314NAME IS NULL:2010/02/02(火) 21:43:55 ID:???
よかったな。久しぶりに気持ちいい質問者だったわ。
315NAME IS NULL:2010/02/20(土) 16:19:47 ID:???
ちょっと古い記事だけど、参考として紹介しておきます。

連載:VB研公開ゼミ議事録
第7回 ADO.NET開発初心者の疑問、解決します!
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_07/opensemi_07_01.html
316NAME IS NULL:2010/03/13(土) 16:18:45 ID:???
read_commitedでのinsertでデッドロックすることがあるんですが、そういうものですか?
insertでなぜおきるのかわかりません
317NAME IS NULL:2010/03/13(土) 16:32:42 ID:???
だれかが、インサートしようとしたテーブルに対して、何らかのロックを獲得してたんだろう
つか、それほんとにデッドロックか?
318NAME IS NULL:2010/03/13(土) 19:51:48 ID:???
insertでのロックで考えられるのは索引に対するもの。
カーディナリティの低い索引で広範囲のロックがかかりやすい。
319age:2010/03/14(日) 23:41:23 ID:VnAk1aHD
データセットのxscファイルがなんのためにあるのかわからん。
教えてエロい人
320NAME IS NULL:2010/03/25(木) 23:40:52 ID:???
>>319
君を困らせるため
321NAME IS NULL:2010/03/28(日) 16:44:06 ID:WjFJHJzm
[email protected],
このアドに
メールしてくれ


322NAME IS NULL:2010/04/30(金) 07:08:31 ID:???
なんのために?
323NAME IS NULL:2010/05/03(月) 02:09:30 ID:ZRam9Y6C
データベースの更新に失敗してロールバックが発生した場合、
データテーブルのRowStateとか更新中に取得した自動採番値を更新前の状態に戻す処理はどうしてますか?

AcceptChangesDuringUpdateをfalseにしてもRowStateが更新されちゃったり(MySqlConnecter.net)
ロールバック時のdatatableのロールバック処理に試行錯誤中です・・・
324NAME IS NULL:2010/05/05(水) 17:33:29 ID:???
Transactionつかうんじゃないの?
もう少し状況を詳しくお願いします。
325323:2010/05/05(水) 18:29:45 ID:8TZZxJWs
>>324
環境はC#2005で、MySqlConnector/Netを使用しています。

処理は以下です。
AcceptChangesDuringUpdateはfalse //Update時にAcceptChangesが実行されないはず
try
{
トランザクション開始
mysqldataadapter.Update(datatable) ← RowUpdatedイベントで自動採番やタイムスタンプの値取得
コミット
datatable.AcceptChanges();
}
catch (sqlexception)
{
ロールバック ← このときにデータテーブルの値をUpdate前の状態に戻したい
}

AcceptChanges()していないのにRowStateが更新されてしまう事と、
Updateが成功したDataRowのタイムスタンプの値をUpdate前の値に戻す処理の実装
をどうすれば良いのかで悩んでいます。
326NAME IS NULL:2010/05/06(木) 06:00:48 ID:???
え?
327NAME IS NULL:2010/05/18(火) 00:17:05 ID:???
>>325
con.Open();
try {
var trans = connection.BeginTrans();
adapter.transaction = trans;
adapter.Fill(table);
trans.Commit();
} carch {
con.Rollback();
}
con.Close();


328NAME IS NULL:2010/05/30(日) 18:32:35 ID:???
DataAdapter.Fillとかで、すこし時間がかかる場合
検索中ですみたいなメッセージを出したいけど、
マルチスレッドにするしかないのかな。難しそうだな
329NAME IS NULL:2010/06/02(水) 23:05:39 ID:???
素直にそのコードの前にマウスポインタを砂時計にするべきじゃないの?
330NAME IS NULL:2010/06/04(金) 03:01:51 ID:???
そしてタイムアウト時の処理を忘れて
砂時計のままになるんですね、、、
331NAME IS NULL:2010/06/07(月) 02:24:32 ID:???
砂時計にしたって、処理待の状態は変わらないんじゃ、、、

BeginInvokeでも使っとれ
332NAME IS NULL:2010/08/06(金) 18:19:36 ID:???
型付DataSet、型なしDataSet、ドラッグ&ドロップで生成、SqlCommand…

ADO.NETってどう使えばいいのかサッパリわからん。
どうすれば一番楽にアプリを作れるの?

なんか1冊いい本教えて。
作りたいのはデスクトップアプリでよくある業務系システム。
333NAME IS NULL:2010/08/21(土) 14:07:37 ID:???
>>332
だったら、GUI(デザイナーなど)上でオブジェクトを配置しない方法を使った方が良いんでね?
他のプログラミング言語とかで、DB接続やるのになるべく近い方法にすれば、イメージもしやすい。
GUI(デザイナー)やウィザードは、それらの労力を省力化する為の便利機能なのだから。

俺が使っていた書籍は、
Visual Basic 2005による [実践]データベースプログラミング
谷尻 かおり (著)
だけど、公式図書は手元においていた方がいいと思うよ。結構な値段するけど。
334NAME IS NULL:2010/09/03(金) 15:36:21 ID:9BFROsrV
>>333
Visual Basic 2005による [実践]データベースプログラミング
かなり後悔した1冊だったわ・・・
335NAME IS NULL:2010/09/11(土) 12:54:30 ID:UkiOG8lQ
>>334
具体的にどこが?
俺はこの一つ前のバージョンの書籍を買ったが、
説明がウィザードのオンパレードで終わっていて、
後悔している。
336NAME IS NULL:2010/09/14(火) 07:14:15 ID:???
ひと目でわかるMicrosoft Visual Basic 2008 データベース開発入門の方がいいな
コレを基礎に複雑なフォームとか作れるようになった 内容はゴク初歩的だけどな
337NAME IS NULL:2010/09/17(金) 16:03:08 ID:???
数十万件のデータを更新するとTableAdapter.Updateの処理に約30秒程掛るのですが、
その間、フォームが応答なし状態になってしまいます。

ちゃんと処理は行われているので待っていれば復帰するのですが、
できればDoEventsみたいに処理を受け付けるようにしたいのです。
そのような方法はありますでしょうか?
338NAME IS NULL:2010/09/17(金) 16:15:21 ID:???
スレッドを使う。backgroundWorkerなど
339NAME IS NULL:2010/09/17(金) 16:15:44 ID:???
スレッド使え
340NAME IS NULL:2010/09/22(水) 14:36:51 ID:???
データテーブル作成時に計算結果を表示する列を追加したい。

現在、社員データテーブルの一覧をそのまま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
341NAME IS NULL:2010/09/22(水) 15:50:08 ID:???
自己解決致しました。
ACCESSでいろいろやっていたところSQL文の中にかなり関数を入れることが可能でした。
以下のSQL文で年齢を含んだデータテーブルを作成することができました。
有難う御座いました。

SELECT ID, 生年月日, Format((Format(Now(),'yyyymmdd') - Format(生年月日,'yyyymmdd')) / 10000, '#0') AS 年齢
FROM 社員テーブル
342NAME IS NULL:2010/10/20(水) 20:08:24 ID:???
ちょっと教えてください!
今、VB2010からADO接続でAccess2007のデータ管理するシステム作ってるんだけど、
Accessで添付ファイル型フィールドにJPEGかBMPのファイルを記録して、それをADOで抽出したいのです。
その時の抽出方法としてDatasetを使用するんですが、このDatasetからどうやって添付ファイル型のデータを抜き取ればいいんでしょう?
DataSet.Tables("テーブル名").Rows(0)("フィールド名")
この構文のあとに何かつけるとか??
343NAME IS NULL:2010/11/22(月) 18:34:13 ID:???
>>342
かなり亀レスだけど、このスレは人が少ないから、
プログラム板のVB関連スレでも同じ質問をしてみると
いいと思う。
その結果をここで紹介してくれるとなおよろし。
344NAME IS NULL:2010/11/23(火) 17:10:07 ID:???
俺の経験談だが、
ADO.NETに関する質問は、プログラム板のVB質問スレでも
丁寧な回答がつく事が多い。
345NAME IS NULL:2010/11/23(火) 19:16:17 ID:???
今のVB.NET質問スレにはDB詳しい人おらんようだで
346NAME IS NULL:2010/11/23(火) 19:26:05 ID:???
347NAME IS NULL:2010/11/27(土) 12:27:43 ID:???
ム板で見つけた関連スレを貼っておきます。

データベースプログラミング全般スレ
http://hibari.2ch.net/test/read.cgi/tech/1097295557/l50

このスレッドも、DB関連話題という枠組みよりも、プログラムとして
どうなのかという話題にする意味合いで、板を移ったほうがいいかもね。
348NAME IS NULL:2010/12/02(木) 23:45:51 ID:???
テーブルアダプタの連想配列みたいなことを実現する方法はありますか?
イメージとしては

Using ta as New myDataAdapters(DataSetName)
 Dim dt as DataTable
 ta.Tables(TableName).fill
dt.Rows(0)(TargetColumnName)="hoge"
ta.Update(dt)
End Using

こんな感じで
349NAME IS NULL:2010/12/02(木) 23:48:04 ID:???
ta.Tables(TableName).fill

じゃなくて

ta.Tables(dt,TableName).fill
もしくは
dt=ta.Tables(TableName).GetData()

こうか
350NAME IS NULL:2011/02/04(金) 13:23:01 ID:???
保守しときます
351NAME IS NULL:2011/03/09(水) 08:20:57.40 ID:???
多分基本的なことなんだろうと思うんですが
どう調べたらいいのかわからないので教えてください
ADO.NET+OLEDBでaccessに接続するときのSQL構文は
MDBファイルをAccessで開いて「クエリ」で入力するものと違いますよね
(例えばワイルドカードが*と%)
この構文は具体的には何の構文になるのでしょうか?
ADO.NET固有のものなのかOLEDB固有のものなのかもよくわからないし
詳細はどこに載っているのですか?

また、executeNonQuery等を実行する直前のsql文をDebug.printして
それをAccessのクエリで動かすと普通に動くのに
コード経由ではエラーになったりすることがあって困ってます
コード経由で実行されるのと同じ構文で
SQLの動作かチェック出来るようなツールが
Visual Studioとかに付属しているとデバッグしやすいのですが
そういうのはあったりしますか?
352NAME IS NULL:2011/03/09(水) 19:58:25.17 ID:???
>>351
> MDBファイルをAccessで開いて「クエリ」で入力するものと違いますよね

 何故そう思った
353NAME IS NULL:2011/03/09(水) 20:02:36.36 ID:???
>>351
> コード経由ではエラーになったりすることがあって困ってます

 エラーになったりしない。
 そもそもSQLが悪いのか?
354NAME IS NULL:2011/03/09(水) 20:16:32.50 ID:???
>>352
実際に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構文の話になるのかな?
355NAME IS NULL:2011/03/09(水) 20:32:17.29 ID:???
解決、ここにありましたわ
ttp://en.w3support.net/index.php?db=so&id=719115
ADOはデフォルトでSQL92準拠の構文
AccessはデフォルトでSQL89準拠の構文+一部準拠してない(VBのワイルドカード)
特にAccess2000はSQL89しか対応していない
また、mdbの設定でモードを変更出来る
ということでした
356NAME IS NULL:2011/05/20(金) 10:26:08.66 ID:8jU7fHP3
VS2005のデータアダプターの同時実行制御オプションONで
生成されるUpdateクエリのWHERE句は、
全列チェックではなく、SELECTで選択した列だけチェックされていますが、
これは、複数のユーザが同じクエリ(選択列)を実行した場合はOKだけど、
そうでない場合はNGじゃない。
357NAME IS NULL:2011/06/20(月) 16:42:47.59 ID:???
LEDいいよね

358NAME IS NULL:2011/06/20(月) 18:11:59.09 ID:???
EPI使ってるやついる?
ActiveRecordでinsert時のkey取得するのってどうやるの?
あと、QPEの接続パラメーター教えて

359NAME IS NULL:2011/07/14(木) 19:09:35.92 ID:???
質問があります。
以下のテーブルをDataAdapterで更新します。

変更前のテーブル
ID DATA
1 晴れ
2 曇り

変更後のテーブル
ID DATA
2 晴れ
1 曇り

IDは主キーに設定してあります。
この場合一意制約違反のエラーが起こります。
DataAdapterを使った更新方法で回避する方法はありますか?
360NAME IS NULL:2011/07/14(木) 22:48:45.40 ID:???
>>359
1 曇り
2 晴れ
 UPDATEすればいいだろ
361359:2011/07/15(金) 00:25:19.89 ID:???
>>360
回答ありがとうございます。
質問はテーブルを単純に書きましたがUPDATE以外にINSERTとDLEATEも同時にやりたいので、
DataAdapterを使用しています。
ID部分の入れ替え動作中に一意制約違反になってしまうので、どうにか回避出来る方法がないか探してます。
362NAME IS NULL:2011/07/15(金) 07:54:05.68 ID:???
>>361
仮に ID の最大値が 99 なら、
100足して、100引いたら、どうだべ。
363NAME IS NULL:2011/07/15(金) 13:15:58.50 ID:???
DataAdapter使ってんなら、ID以外の部分を入れ替えればいいだろ
364NAME IS NULL:2011/07/15(金) 14:36:36.64 ID:???
IDを書き換えるって発想がまずおかしい
IDを書き換えてダブったらエラーになるのは当然で
DataAdapterでどうこうするような話じゃないと思うが

UPDATEするのやめて、変更行はDELETEしてINSERTするようにすれば?
365NAME IS NULL:2011/07/15(金) 18:19:31.42 ID:???
>>364
DataRowに元テーブルの情報まで入っちまってるんで元情報を取っておくことが出来ない
やるとするとInsert用のRowを新規作成して元Rowからカラムを一つ一つコピーしていくアホ臭いことしないとならない
しょうがないので俺はカラム列挙してコピーするメソッド自作したよ
366NAME IS NULL:2011/07/16(土) 22:15:46.61 ID:???
俺ずっとADOのこと「アド」って読んでたんだけど・・・・


367NAME IS NULL:2011/07/23(土) 12:48:32.26 ID:ooK807YS
DataAdapterで更新っていうことにこだわってる理由がいまいちわからない。
どうして他の方法ではダメなのか、それを書かないとと思うのだが。
ExecuteNonQueryとか。
368NAME IS NULL:2011/07/23(土) 16:43:22.93 ID:???
エスパーすると
スキーマが度々変わってめんどい or カラム型チェックがなくなるのはヤダヤダ
あたりじゃないか
369NAME IS NULL:2011/08/02(火) 23:29:38.05 ID:???
!!!【ADO.netのソース流出】!!!

http://cdn1.publicphoto.xtube.com/photos/20110621/13/l76RjrQpn3yj.jpg

!!!【DANGER!!】【DANGER!!】【DANGER!!】!!!



370NAME IS NULL:2011/08/10(水) 10:12:46.30 ID:???
Visual Studio 2008 でSQL Server 2005 上のデータを表示・更新をするWindows Form
アプリケーションを作ろうとしています。

下のような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をドラッグ&ドロップ。
データが表示されるところまではできた。

あとどうしたらいいんですか。
371NAME IS NULL:2011/08/10(水) 13:44:23.26 ID:???
TextBoxのチェンジイベント補足してSelectしろ
372NAME IS NULL:2011/08/10(水) 16:35:14.36 ID:???
そんな蛸足配線みたいなことが出来るか。
次。
373NAME IS NULL:2011/08/10(水) 17:04:42.62 ID:???
>>372
回答者はお前だけじゃない。
答えられないからと”次”とかお前様主動でスレ進行させんな
374NAME IS NULL:2011/08/10(水) 17:36:49.88 ID:???
次も何も>>371で回答終わってんだろ
375NAME IS NULL:2011/08/23(火) 09:49:57.31 ID:???
TextBoxのチェンジイベントでSelectが嫌なら、
Formオープン時にSelectして適当な変数に格納、TextBoxのチェンジイベントでその値を取得
って流れになると思う。
結局はTextBoxのチェンジイベントを使うんじゃないの?
376NAME IS NULL:2011/09/03(土) 16:52:43.26 ID:???
バインドしたらいいだけ
377NAME IS NULL:2011/09/19(月) 17:37:25.62 ID:???
バインドしたらいいだけと言う対処方法を取る場合、
それの為だけに新しくテーブル作ったりするものなの?
バインドの為にローカルでmdbファイル準備するとか。
378NAME IS NULL:2011/09/20(火) 03:41:39.47 ID:???
お前バインドなんだと思ってんだ?
379NAME IS NULL:2011/09/20(火) 11:31:35.13 ID:???
わずか1ミリ秒でバインドを完了する
380NAME IS NULL:2011/09/20(火) 21:56:55.32 ID:???
Accessで言う連係だと思ってました。スマソ
非接続型になるから、メモリに読み込んでいて表示させても、
バインドしても処理内容は同じだったんだね。。。
381NAME IS NULL:2011/11/26(土) 10:33:19.73 ID:???
俺が使ってみた感想としては、DataTableは配列の塊として使いやすいよね。
後は要らんって感じなんだがな。
DataSetの有効活用方法ってあるのだろうか?型指定されたDataSetを使わない
場合には必要あるのかな?
382NAME IS NULL:2011/11/26(土) 13:13:40.69 ID:???
あげぽよ〜ん
383NAME IS NULL:2011/11/27(日) 03:47:20.24 ID:???
>>381
複数のDataTableをぶち込んで受け渡し
非接続だからいちいちdtoクラスとか作らなくていい
384NAME IS NULL:2011/11/27(日) 20:01:24.52 ID:???
>>383
なるほど。サンクス。
リレーション情報の活用ってしてますか?
俺はプログラム上で実現してるから、リレーションの
設定やらって基本しない。
開発時にエラーが出たりするのが逆に面倒だったりする。
385NAME IS NULL:2011/12/01(木) 16:46:12.13 ID:NE/R2Q2K
informixへの接続文字列わかる方いませんか?
odbcを使わずに接続できるらしいんですが調べても全然分からないんです
386NAME IS NULL:2011/12/02(金) 01:41:29.39 ID:???
>>385
ぐぐったらすぐ出てきたけど?
387NAME IS NULL:2011/12/02(金) 01:41:55.70 ID:???
388NAME IS NULL:2011/12/02(金) 11:38:19.59 ID:uq6jKSUZ
385です情報ありがとうございます。

●●.ConnectionString="Provider=Ifxoledbc;Data Source=データベース名@サーバー名;User ID=ユーザー名;Password=パスワード;"

でしてみたのですがエラー0x80040E21が出たので解決策を模索中です。
なにか根本的に間違ってるかもしれないです…
389NAME IS NULL:2011/12/11(日) 12:23:56.82 ID:55w2N/S/
検索エンジンGoogleで「インターネットテレビ 朝鮮総連 少頭劣一族 マイクロソフト社(又は経済産業省等気になる省やインターネットや原発、地震 波動砲)」を検索。
警察と自衛隊の武器は少頭劣一族が奪い、朝鮮に送ったらしい。知能障害以前の頭が悪い家族達。「工作員」の意味を知らない「工作員」家族。
390NAME IS NULL:2012/02/14(火) 20:45:35.48 ID:q17BHHig
すみません。質問いいですか?

C#でデータベースをdataset(データグリッドビューにバインドして作りました)にして扱っているのですが

訳あって同じ構造の別名テーブルに差し替える必要がでました。

クエリビルダでテーブルを差し替えると列の並びが狂うのですが、なにがおかしいのでしょうか?

また、列の並びをそのままに差し替えるいい方法はないでしょうか?

よろしくお願いします。
391NAME IS NULL:2012/02/14(火) 20:51:57.22 ID:???
すみません。急ぐもので。。C#スレに行かせて頂きます
392NAME IS NULL:2013/10/16(水) 03:55:42.10 ID:7O1WvKyT
いってらっしゃい
393NAME IS NULL:2014/07/20(日) 11:54:22.83 ID:usQ+cISA
★2ch勢いランキングサイトリスト★

◎ +ニュース板
・ 2NN
・ 2chTimes
◎ +ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
◎ +ニュース板他
・ Desktop2ch
・ 記者別一覧
◎ 全板
・ 全板縦断勢いランキング
・ スレッドランキング総合ランキング
・ ログ速
◎ 全板実況込み
・ 2勢
・ READ2CH
・ i-ikioi

※ 要サイト名検索
394NAME IS NULL
データベースデザイナ、便利だとの宣伝に釣られて使ってしまい、いま地獄を味わっている。