X



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

0201NAME IS NULL
垢版 |
2009/06/13(土) 14:01:36ID:???
MSDNだけで十分といえるには、それなりの前提知識がある場合の話でしょ。
例えば、VB5の開発経験がある人だとVB6の習得にかかる時間は・・・みたいな。
それだけの知識が無い場合は、技術評論社などの一般向け書籍を読み、
ADO.NETの公式文書を読み、MSDNという順序しかないと思う。
0202NAME IS NULL
垢版 |
2009/06/13(土) 14:05:15ID:???
>>200
プログラマー板のVB.NETスレなどに行って相談してみると
いいかもしれない。
ここがスレ違いというわけではないが、情報量が違うから
0203NAME IS NULL
垢版 |
2009/06/13(土) 18:18:33ID:???
>>202
そうですか。
とりあえずVB.NETの質問スレに行ってみます。
0204NAME IS NULL
垢版 |
2009/06/15(月) 09:11:39ID:???
マ板じゃなくて、ム板だったな。。。
すまん
0205NAME IS NULL
垢版 |
2009/06/16(火) 19:19:15ID:???
>>200
レポートデザイナ?でいろいろやるより
出来上がりの形までのストアドを作ったほうが楽かもね
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
で追加更新までは出来るようになりました。

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

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

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

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

どこか参考になるサイトをご存じないでしょうか?
0213NAME IS NULL
垢版 |
2009/06/30(火) 13:01:37ID:???
>>212
ありがとうございます。

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

よろしくお願いいたします。
0214213
垢版 |
2009/06/30(火) 19:10:57ID: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⇒失敗
となります。

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

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

>TableAdapterのUpdateCommandが設定

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

よろしくお願い致します。
0218NAME IS NULL
垢版 |
2009/07/03(金) 20:00:18ID:???
>>217
じゃ、プロジェクトファイルをうpってみたらどうかな?
デザイナ上ではすべてが出来るわけでもないしさ
0219NAME IS NULL
垢版 |
2009/07/04(土) 11:30:48ID:???
「ADO.NETはおろかDB初心者です」っていうのならば、
こういうことをやる前に、SQL文について勉強して
おいた方がいいと思う。
SQLがある程度書けるくらいになっておかないと、
概念の理解まで至らないし、これから先もあらゆる
ことでつまづきまくると思う。
0220NAME IS NULL
垢版 |
2009/07/21(火) 13:44:37ID:???
新しいクラスが出てくると、便利な反面、そのルールや使い方を覚えて
習得しなければならないのが欠点だな。
ADO.NETの場合、欠点のみが表に出ている感がするのだが・・・
0221NAME IS NULL
垢版 |
2009/07/22(水) 08:13:16ID:???
次バージョンに期待だなw
0222NAME IS NULL
垢版 |
2009/07/24(金) 11:44:07ID: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()してもやはりエラーが出てしまいます
一体何が原因なのでしょうか?
0223NAME IS NULL
垢版 |
2009/07/24(金) 18:30:56ID:???
TableAdapterが使ってるSQLを確認してみれば?
基本的には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
テーブル内のデータをDELETEで削除したあと、新しいデータをINSTALLで入れるプログラムを
書いたんだけど1万近いデータをforで回しながら入れていくとめちゃ時間かかります
なにか高速化する方法はないでしょうか?
0226NAME IS NULL
垢版 |
2009/07/25(土) 11:29:02ID:???
俺も「主キーを更新する」という設計の方に問題があるように思うな。
そのフィールドを入替えする必要性があるのであれば、それとは
別に主キーフィールドを準備するべきだ。
0227NAME IS NULL
垢版 |
2009/07/25(土) 11:30:53ID:???
>>225
いちいちINSTALLしてるから時間がかかるんじゃないの?
0228NAME IS NULL
垢版 |
2009/07/25(土) 11:35:26ID:???
>>225
あなたの言う「めちゃ」の基準がどんなものなのかというものがあるし、
極端な話、コネクションのopen/closeをforの中に入れてしまっている
可能性などもあるので、具体的にどういうプログラムを書いているのか、
現状は何秒かかっているのか、何秒くらいにしたいのか、などを
書かないと話はすすまないんじゃないかな。
0229NAME IS NULL
垢版 |
2009/07/25(土) 12:56:30ID:???
1万件insertするとどうしてもそこそこ時間がかかる。
1000件ごとにコミット、とかで大幅に速くなる可能性はある。
あとはselect/insert1発で出来るような話ならそうするとか
0230NAME IS NULL
垢版 |
2009/07/25(土) 13:03:06ID:QzAHKE4L
データ入れるときの列の指定に列名を文字列で指定してるとか?
0231NAME IS NULL
垢版 |
2009/07/26(日) 02:30:21ID:???
わんくまの人でそのパフォーマンス調べてた人いたな。
1行ずつコミットと複数行コミットともひとつあったな。
0233NAME IS NULL
垢版 |
2009/07/28(火) 15:27:24ID:6RYCaFK/
Decimal型からデータを読み取れない、System.OverflowExceptionが起こる。
(データは8.012345678901234567890123456 .netのdecimal型の有効桁数に収まる)
data provider for sqlserver ×
data provider for ODBC ○ 
0234NAME IS NULL
垢版 |
2009/08/18(火) 15:31:48ID:???
Visual Studioのデータベースプロジェクトで、
テーブルなどを生成するsqlや実際のMDFを生成することは出来ます。
でも、初期データのレコードをそれに入れるにはどうしたら良いのでしょうか?

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

管理用テーブルに初期レコードを入れたい状況は結構あると思うのですが。
0235NAME IS NULL
垢版 |
2009/08/18(火) 15:36:41ID:???
普通にsql走らせればええやん
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
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 のフィールドが存在しなかったです。。。
0240NAME IS NULL
垢版 |
2009/09/08(火) 18:28:11ID:???
質問いいですか?

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

すれ違いかもしれませんが、どなたか宜しくお願いいたします。
0243NAME IS NULL
垢版 |
2009/09/09(水) 18:25:43ID:???
>>241
>>242
ご親切にありがとうございました。返事が遅れてすみません。

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

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

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

こんなのがすごくやりたいです・・・。
0248NAME IS NULL
垢版 |
2009/09/12(土) 21:20:07ID:???
>>247
SQL Server 2008からテーブル値パラメータってのがあるから、それ使えば?
0249NAME IS NULL
垢版 |
2009/09/13(日) 11:54:45ID:CN3ToSfV
>>248
ストアドですか・・・。でも接続先はmdb(2000)。。。(死)
0250NAME IS NULL
垢版 |
2009/09/13(日) 12:19:48ID:???
パラメータクエリーは、Access 相手でもできるだろが。
0251NAME IS NULL
垢版 |
2009/09/13(日) 17:01:20ID:???
mdbは"@"ではないけどね。
0252NAME IS NULL
垢版 |
2009/09/13(日) 20:54:58ID:???
mdbにはgetdate()もなかったとおもったがな
対象をちゃんと書かない>>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:???
皆はTableAdapter使ってるのか?
使ってみたけどなんかいまいちじゃ〜
0255NAME IS NULL
垢版 |
2009/09/20(日) 20:43:01ID:???
>>254
俺使ってた
型付DataRowは結構便利だった
LINQ出たから過去形
0257NAME IS NULL
垢版 |
2009/09/21(月) 10:17:43ID:???
TableAdapterもLINQも過渡的な技術で直ぐに過去のものとなる。
やはり、ExecuteReader、ExecuteNonQuery が最強ですな
0258NAME IS NULL
垢版 |
2009/09/21(月) 11:06:02ID:???
TableAdapterは、紹介見たところで、便利だろうなとは思ったが、
使わなかった。なるべく統一性のある方法でやりたいという考え
でやっているので、俺も>>257のようなやり方でやっている。
LINQは、過去に使いこなされたものを真似して作ったという系統では
なく、新しいことをやろうという系統のことなので、言語仕様や
書き方はしばらくの間は変わりそうな予感がするので、手をつけないでいる。
0259NAME IS NULL
垢版 |
2009/09/21(月) 11:10:21ID:???
TableAdapterもLINQで読み込みだけさせて更新はExecuteNonQueryで
やるのもありかと。
0261NAME IS NULL
垢版 |
2009/09/21(月) 13:39:27ID:???
>>257
キャストが要らなくなるならそれでもいいがね
0262NAME IS NULL
垢版 |
2009/09/21(月) 14:51:02ID:???
>>261
キャストはIDEが教えてくれるので無問題
0263NAME IS NULL
垢版 |
2009/09/21(月) 18:10:27ID:???
>>262
だが列名のスペルミスまでは指摘してくれない
0264NAME IS NULL
垢版 |
2009/09/21(月) 21:10:10ID:???
>>263
テストくらいするだろ〜
TableAdapterでもプロパティ名間違えると駄目だし。
0265NAME IS NULL
垢版 |
2009/09/21(月) 23:42:51ID:???
TableAdapterなんてDMLとConnectionをまとめただけのようなもんだろ。
0266NAME IS NULL
垢版 |
2009/09/23(水) 12:41:30ID:4tX5mSUz
ExecuteNonQueryの結果をそのままTableAdapterにつっこむのに便利
LOOPでSQL吐く代わりに、オンメモリでアクセスしたくなるときは便利やん
0268NAME IS NULL
垢版 |
2009/09/24(木) 11:35:19ID:gNkdYfWL
すまん 寝ぼけてた>>267
0269NAME IS NULL
垢版 |
2009/10/06(火) 20:27:30ID:???
テーブルロックについて基本的なことを教えてください。
Update とか Merge を投げるクライアントアプリを作ったのですが、
現状トランザクションではなく、単にSQL文を発行しているだけの状態です。
SQL文投げる前にテーブルロックをかける必要はあるのでしょうか?
そもそも、トランザクションを使わないDB操作にテーブルロックができるのか
疑問なのですが。
0270NAME IS NULL
垢版 |
2009/10/06(火) 20:46:13ID:???
>>269
ロックにもいろいろある
楽観的ロックで検索してみろ
0271NAME IS NULL
垢版 |
2009/10/06(火) 22:36:30ID:???
オレは何時でも超楽観的ロック。
つまり、ロックなど一切しないw
0272NAME IS NULL
垢版 |
2009/10/07(水) 20:15:21ID:???
>>270
だから、馬鹿のゴミレスは不要だって。
0273NAME IS NULL
垢版 |
2009/10/09(金) 01:01:52ID:???
>>269
まず対象の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:???
プログラミングADO.NET 2.0
現場で使えるSQL
0276NAME IS NULL
垢版 |
2009/10/11(日) 20:23:28ID:???
SqlDataSource の ConnectionString とか SelectCommand をプログラムで動的に
変更することはできるのでしょうか?
GridViewにDBを貼り付けて表示させるときに、SqlDataSourceをウィザードで定義
する方法はあるのですが、その設定をプログラムで動的に変更する方法は無いかと
調べているところです。
ご存知の方いましたら教えてください。
0277NAME IS NULL
垢版 |
2009/10/11(日) 22:15:46ID:???
>>275
ありがとうございます。
助かります。
0279NAME IS NULL
垢版 |
2009/10/12(月) 12:20:11ID:???
またスキルの無い馬鹿がゴミレスしてるわ。
0280NAME IS NULL
垢版 |
2009/10/19(月) 20:23:19ID:???
>>276
>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:???
visual studio2008です。

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

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

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

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

ただ、余計に手間がかかる理由が不明。
0283NAME IS NULL
垢版 |
2009/10/21(水) 03:55:41ID:???
DataAdapterでFillしたときに、関連する子テーブルも自動でFillされるんだな。
便利だけど動作が把握し切れん・・・
0284NAME IS NULL
垢版 |
2009/10/22(木) 21:48:37ID:???
>>280
GridViewの質問だよ。DataGridViewじゃないよ。
0285NAME IS NULL
垢版 |
2009/10/26(月) 07:44:18ID:???
>>283
便利機能のライブラリって、必ずそういう事がつきまとうよな。
で、結局は従来からの面倒だが非常に単純なやり方に落ち着いたりする・・・w
0286NAME IS NULL
垢版 |
2009/10/28(水) 22:26:08ID:???
Accessのフォームは、非連結フォームに落ち着くよな。
みたいなw
0287NAME IS NULL
垢版 |
2009/11/13(金) 21:46:16ID:???
DBから、DataTableに読み込んだテーブルがやたらとでかくて、
そのクライアント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:???
>>288
レスありがとうございます。
テーブルの操作が複雑な場合、サーバやネットワークの負荷を抑える為に、
処理の途中で、一時保存という形でローカルPCにmdbファイルという形で
保存しておいて、それを処理していくというものを作ろうとしたのですが、
その場合、mdbファイルに保存されたテーブルを処理する過程の部分は、
なるべくデータを少なく読み取るように工夫をする事で対処出来ますが、
サーバのテーブルをローカルへコピーする過程の部分で、テーブルが
大きすぎる場合は大丈夫なのかなとか思ったのです。

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

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

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

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

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

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

LIKEのターゲットがCHAR(8)なのでこれが原因みたいですね。
0299NAME IS NULL
垢版 |
2009/12/12(土) 20:57:00ID:???
馬鹿は使うなってマジで・・・
0300NAME IS NULL
垢版 |
2009/12/12(土) 22:59:47ID:???
substring
つーかSQLスレで聞け
レスを投稿する


ニューススポーツなんでも実況