X



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

0200NAME IS NULL
垢版 |
2009/06/10(水) 20:06:05ID:???
ReportViewerコントロール用のレポートファイル( .rdlc )のデザイナでの作成方法について色々解説してあるページとか参考書ってないでしょうか。

レポートウィザードで作れるピボットテーブルをベースに色々と追加したい要素があるんですが、どうやりゃ良いのかいまいちわからない。
一応、やりたいことは今年度のピボットテーブルに前年度の合計とか、前年度比とかの行とか列を追加することです。
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スレで聞け
0301NAME IS NULL
垢版 |
2009/12/12(土) 23:20:41ID: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%ではまるで抽出できませんでした
0302NAME IS NULL
垢版 |
2009/12/12(土) 23:22:03ID:kLyx5gG9
だぁっ!!すみません。誤爆しました。
0303NAME IS NULL
垢版 |
2010/01/11(月) 00:38:34ID:???
LINQ使えば、もうADO.NETは不要という時代になってきたのかな・・・
0304NAME IS NULL
垢版 |
2010/01/12(火) 00:41:27ID:???
頑張ってLinq使ってるけど一長一短て感じだなー。
補完的に使うと便利だけど完全にADO.NETを置き換えられるか、つーと色々微妙。
取得結果を1カラムずつループ、とか出来ないし。
0305NAME IS NULL
垢版 |
2010/01/12(火) 03:06:20ID:???
Linq to SQLもEntity Frameworkも基本的にORMだから、
他の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:???
>>306
System.Data.SqlClient.qlCommandでは2)は1)と同じ動作になる。
前提条件や再現するソースくらい出しなよ。
0308NAME IS NULL
垢版 |
2010/01/25(月) 23:24:47ID:???
どうせOLEDBとかODBCでやってんだろ。
0309NAME IS NULL
垢版 |
2010/01/27(水) 07:39:54ID:???
likeの後の文字列が途中で切れてると神の啓示があったぞ
0310306
垢版 |
2010/02/01(月) 12:22:20ID: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
パラメータ文字列長に上限値が存在するということでしょうか?
0311NAME IS NULL
垢版 |
2010/02/01(月) 23:48:53ID:???
本当に調査したいのならSQLServreProfilerでどんなSQLが発行されたか調べればいい。
0312NAME IS NULL
垢版 |
2010/02/02(火) 08:14:03ID:???
つか最低限のコード晒せよ
話はそれからだ
0313306
垢版 |
2010/02/02(火) 18:10:41ID:QBgQPh1C
>>311,312さまレス有り難う御座います。

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

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

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

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

>>その他の皆様
私自身DBをよくわかっていないため、的確な情報が出せずに、申し訳ありません。
質問に反応して頂き有り難う御座いました。助かりました!!
0314NAME IS NULL
垢版 |
2010/02/02(火) 21:43:55ID:???
よかったな。久しぶりに気持ちいい質問者だったわ。
0316NAME IS NULL
垢版 |
2010/03/13(土) 16:18:45ID:???
read_commitedでのinsertでデッドロックすることがあるんですが、そういうものですか?
insertでなぜおきるのかわかりません
0317NAME IS NULL
垢版 |
2010/03/13(土) 16:32:42ID:???
だれかが、インサートしようとしたテーブルに対して、何らかのロックを獲得してたんだろう
つか、それほんとにデッドロックか?
0318NAME IS NULL
垢版 |
2010/03/13(土) 19:51:48ID:???
insertでのロックで考えられるのは索引に対するもの。
カーディナリティの低い索引で広範囲のロックがかかりやすい。
0319age
垢版 |
2010/03/14(日) 23:41:23ID:VnAk1aHD
データセットのxscファイルがなんのためにあるのかわからん。
教えてエロい人
0321NAME IS NULL
垢版 |
2010/03/28(日) 16:44:06ID:WjFJHJzm
yorapaa@yahoo.co.jp,
このアドに
メールしてくれ


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:???
Transactionつかうんじゃないの?
もう少し状況を詳しくお願いします。
0325323
垢版 |
2010/05/05(水) 18:29:45ID: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前の値に戻す処理の実装
をどうすれば良いのかで悩んでいます。
0327NAME IS NULL
垢版 |
2010/05/18(火) 00:17:05ID:???
>>325
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:???
DataAdapter.Fillとかで、すこし時間がかかる場合
検索中ですみたいなメッセージを出したいけど、
マルチスレッドにするしかないのかな。難しそうだな
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:???
型付DataSet、型なしDataSet、ドラッグ&ドロップで生成、SqlCommand…

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

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

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

ちゃんと処理は行われているので待っていれば復帰するのですが、
できればDoEventsみたいに処理を受け付けるようにしたいのです。
そのような方法はありますでしょうか?
0338NAME IS NULL
垢版 |
2010/09/17(金) 16:15:21ID:???
スレッドを使う。backgroundWorkerなど
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:???
>>342
かなり亀レスだけど、このスレは人が少ないから、
プログラム板のVB関連スレでも同じ質問をしてみると
いいと思う。
その結果をここで紹介してくれるとなおよろし。
0344NAME IS NULL
垢版 |
2010/11/23(火) 17:10:07ID:???
俺の経験談だが、
ADO.NETに関する質問は、プログラム板のVB質問スレでも
丁寧な回答がつく事が多い。
0345NAME IS NULL
垢版 |
2010/11/23(火) 19:16:17ID:???
今のVB.NET質問スレにはDB詳しい人おらんようだで
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(TableName).fill

じゃなくて

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

こうか
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:???
>>351
> MDBファイルをAccessで開いて「クエリ」で入力するものと違いますよね

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

 エラーになったりしない。
 そもそもSQLが悪いのか?
0354NAME IS NULL
垢版 |
2011/03/09(水) 20:16:32.50ID:???
>>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構文の話になるのかな?
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
VS2005のデータアダプターの同時実行制御オプションONで
生成されるUpdateクエリのWHERE句は、
全列チェックではなく、SELECTで選択した列だけチェックされていますが、
これは、複数のユーザが同じクエリ(選択列)を実行した場合はOKだけど、
そうでない場合はNGじゃない。
0358NAME IS NULL
垢版 |
2011/06/20(月) 18:11:59.09ID:???
EPI使ってるやついる?
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:???
>>359
1 曇り
2 晴れ
 UPDATEすればいいだろ
0361359
垢版 |
2011/07/15(金) 00:25:19.89ID:???
>>360
回答ありがとうございます。
質問はテーブルを単純に書きましたがUPDATE以外にINSERTとDLEATEも同時にやりたいので、
DataAdapterを使用しています。
ID部分の入れ替え動作中に一意制約違反になってしまうので、どうにか回避出来る方法がないか探してます。
0362NAME IS NULL
垢版 |
2011/07/15(金) 07:54:05.68ID:???
>>361
仮に ID の最大値が 99 なら、
100足して、100引いたら、どうだべ。
0363NAME IS NULL
垢版 |
2011/07/15(金) 13:15:58.50ID:???
DataAdapter使ってんなら、ID以外の部分を入れ替えればいいだろ
0364NAME IS NULL
垢版 |
2011/07/15(金) 14:36:36.64ID:???
IDを書き換えるって発想がまずおかしい
IDを書き換えてダブったらエラーになるのは当然で
DataAdapterでどうこうするような話じゃないと思うが

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


0367NAME IS NULL
垢版 |
2011/07/23(土) 12:48:32.26ID:ooK807YS
DataAdapterで更新っていうことにこだわってる理由がいまいちわからない。
どうして他の方法ではダメなのか、それを書かないとと思うのだが。
ExecuteNonQueryとか。
0368NAME IS NULL
垢版 |
2011/07/23(土) 16:43:22.93ID:???
エスパーすると
スキーマが度々変わってめんどい or カラム型チェックがなくなるのはヤダヤダ
あたりじゃないか
0370NAME IS NULL
垢版 |
2011/08/10(水) 10:12:46.30ID:???
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をドラッグ&ドロップ。
データが表示されるところまではできた。

あとどうしたらいいんですか。
0371NAME IS NULL
垢版 |
2011/08/10(水) 13:44:23.26ID:???
TextBoxのチェンジイベント補足してSelectしろ
0372NAME IS NULL
垢版 |
2011/08/10(水) 16:35:14.36ID:???
そんな蛸足配線みたいなことが出来るか。
次。
0373NAME IS NULL
垢版 |
2011/08/10(水) 17:04:42.62ID:???
>>372
回答者はお前だけじゃない。
答えられないからと”次”とかお前様主動でスレ進行させんな
0375NAME IS NULL
垢版 |
2011/08/23(火) 09:49:57.31ID:???
TextBoxのチェンジイベントでSelectが嫌なら、
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:???
わずか1ミリ秒でバインドを完了する
0380NAME IS NULL
垢版 |
2011/09/20(火) 21:56:55.32ID:???
Accessで言う連係だと思ってました。スマソ
非接続型になるから、メモリに読み込んでいて表示させても、
バインドしても処理内容は同じだったんだね。。。
0381NAME IS NULL
垢版 |
2011/11/26(土) 10:33:19.73ID:???
俺が使ってみた感想としては、DataTableは配列の塊として使いやすいよね。
後は要らんって感じなんだがな。
DataSetの有効活用方法ってあるのだろうか?型指定されたDataSetを使わない
場合には必要あるのかな?
0383NAME IS NULL
垢版 |
2011/11/27(日) 03:47:20.24ID:???
>>381
複数のDataTableをぶち込んで受け渡し
非接続だからいちいちdtoクラスとか作らなくていい
0384NAME IS NULL
垢版 |
2011/11/27(日) 20:01:24.52ID:???
>>383
なるほど。サンクス。
リレーション情報の活用ってしてますか?
俺はプログラム上で実現してるから、リレーションの
設定やらって基本しない。
開発時にエラーが出たりするのが逆に面倒だったりする。
0385NAME IS NULL
垢版 |
2011/12/01(木) 16:46:12.13ID:NE/R2Q2K
informixへの接続文字列わかる方いませんか?
odbcを使わずに接続できるらしいんですが調べても全然分からないんです
0388NAME IS NULL
垢版 |
2011/12/02(金) 11:38:19.59ID:uq6jKSUZ
385です情報ありがとうございます。

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

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

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

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

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

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

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

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

※ 要サイト名検索
0394NAME IS NULL
垢版 |
2015/03/01(日) 17:25:13.65ID:???
データベースデザイナ、便利だとの宣伝に釣られて使ってしまい、いま地獄を味わっている。
0395NAME IS NULL
垢版 |
2015/07/25(土) 17:59:32.99ID:???
ado.netってc#と関係有りますか?
c#習得出来たのでデータベースも勉強したいんですが、データベースってそれを使う目的が無いとプログラムも作れないし、どうやって勉強したらいいか迷っています。オススメの入門サイトなど有れば教えて下さい。
0397NAME IS NULL
垢版 |
2017/12/29(金) 12:10:12.50ID:dtNZwIie
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

IPPOSAG5MP
0398NAME IS NULL
垢版 |
2018/02/14(水) 13:26:20.87ID:???
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
0399NAME IS NULL
垢版 |
2018/05/30(水) 20:19:35.54ID:PJp3eSco
AddWithValueによる型指定が出来ない
クソ!と思ってたが、

cmd.Parameters.AddWithValue("@変数",値).SqlDbType = SqlDbType.VarChar

みたいに簡単にできる事を知ったときはシビれた。
0400NAME IS NULL
垢版 |
2018/07/21(土) 20:46:05.53ID:???
fillでdatasetにselectの結果が入ると思うんですが、そのテーブル名をsql側で指定することってできますか?
0402NAME IS NULL
垢版 |
2020/01/26(日) 02:26:51.45ID:BP0mZu6W
バイナリ型のデータの取得で質問があります
データベースでアクセスでフィールド型OLE オブジェクト型があり
そこにバイナリデータがあります。
具体的にはEXCELのファイルのバイナリが登録されています(これは直接登録)
そこからADO.NETでそのバイナリを読み出し
クライアントにダウンロードして開けたいと思っています。
プログラム
・・・・・・前半省略
while (reader.Read())//アクセスからデータをバイナリデータを読み込む
{
ExcelBinary = (Byte[])reader.GetValue(0);//EXCELのバイナリデータ(あらかじめ登録されている)
Response.AddHeader("Content-Disposition", "attachment;filename=" + "data.xlsx"); //ヘッダー
Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定
Response.BinaryWrite(PhotoData);// HTTP出力ストリームにバイナリ文字の文字列を書き込む
Response.Flush();
Response.End();

これでいけるとおもうのですが確かにダウンロードしてEXCELがたちあがるのですが
ファイルが壊れているか拡張子が違うとメッセージが出て開けません
疑問点は何か足りない部分があるのでしょうか?
ちなみにアクセスでなくファイルのバスにEXCELデータを直接置いた場合はファイルがダウンロードされて
開けます。
さらにFsstreamで書き出して直接開けても同じこのがおこります。
EXCELやPDFはアクセスに登録してダウンロードして開けることはできないのでしょうか?
ご教授していただければ幸いです
0403NAME IS NULL
垢版 |
2020/01/26(日) 02:26:56.38ID:BP0mZu6W
バイナリ型のデータの取得で質問があります
データベースでアクセスでフィールド型OLE オブジェクト型があり
そこにバイナリデータがあります。
具体的にはEXCELのファイルのバイナリが登録されています(これは直接登録)
そこからADO.NETでそのバイナリを読み出し
クライアントにダウンロードして開けたいと思っています。
プログラム
・・・・・・前半省略
while (reader.Read())//アクセスからデータをバイナリデータを読み込む
{
ExcelBinary = (Byte[])reader.GetValue(0);//EXCELのバイナリデータ(あらかじめ登録されている)
Response.AddHeader("Content-Disposition", "attachment;filename=" + "data.xlsx"); //ヘッダー
Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定
Response.BinaryWrite(PhotoData);// HTTP出力ストリームにバイナリ文字の文字列を書き込む
Response.Flush();
Response.End();

これでいけるとおもうのですが確かにダウンロードしてEXCELがたちあがるのですが
ファイルが壊れているか拡張子が違うとメッセージが出て開けません
疑問点は何か足りない部分があるのでしょうか?
ちなみにアクセスでなくファイルのバスにEXCELデータを直接置いた場合はファイルがダウンロードされて
開けます。
さらにFsstreamで書き出して直接開けても同じこのがおこります。
EXCELやPDFはアクセスに登録してダウンロードして開けることはできないのでしょうか?
ご教授していただければ幸いです
0404NAME IS NULL
垢版 |
2020/01/26(日) 13:40:04.90ID:???
MIME登録されてないだけだろ
IISで設定しろ
0405NAME IS NULL
垢版 |
2020/01/26(日) 18:02:42.11ID:BP0mZu6W
そうなんですか?
IISの設定なんているのですか?
Response.ContentType = "application/msexcel";// MIMEコンテンツタイプを指定
ではだめなんですか?
0406NAME IS NULL
垢版 |
2020/01/26(日) 18:30:42.28ID:BP0mZu6W
しかし、ダウンロードはできるのです。
そのファイルが開けないのです。(サポートされていない形式ですのエラーメッセージ)
サーバにファイルがある場合は普通にダウンロードできて開けるのです
アクセス、SQLServerにバイナリデータとして登録されている場合が
開けないのです。
0407NAME IS NULL
垢版 |
2020/01/26(日) 20:18:34.75ID:8nfufEbl
・バイナリデータの格納
・バイナリデータの読み込み
・データをダウンロードさせる
・(クライアントが)ファイルを開く
のうち、どこまで成功してるんだ?

そもそも、そのデータは「ファイルの中身」なのか?
0408NAME IS NULL
垢版 |
2020/01/26(日) 20:39:21.04ID:BP0mZu6W
バイナリはあらかじめ格納できているのです
それをサーバー側からダウンロードしてアプリを自動的に立ち上げ
(要はWebから自動的にPDFを開ける)のと同じようにしたいのです
PDF,EXCEL,WORDなどがバイナリとしてアクセスまたはSQLServerでダウンロード
して中身を見たいのです
Server.MapPath(string.Format(@"./File/{0}", "Test.bmp"));
のようにあらかじめファイルをディレクトリにおいたときは
Respnse.writeBainaryでうまくいきます
問題はSQLServer アクセスにバイナリとして格納したときはできないのかな?と
やっぱり、ディレクトリの位置だけでDBの登録してServer.MapPath
でダウンロードしかないのかなと。
0409NAME IS NULL
垢版 |
2020/01/28(火) 23:10:28.36ID:???
OLEオブジェクト型はバイナリ型じゃないからな
OLEヘッダ付きで格納されてるから、OLEヘッダ落とす必要があったはず
0410NAME IS NULL
垢版 |
2020/02/03(月) 12:35:43.47ID:???
そうなんだ。ヘッダー落すのは先頭からバイトを削る事何ですか。わ
0411NAME IS NULL
垢版 |
2020/02/03(月) 21:24:17.58ID:???
409
確かにマイクロソフトのaspnetの分厚い本にコードの書き方書いてありましたね
少し試して見ます。thanks
0412NAME IS NULL
垢版 |
2020/02/03(月) 22:04:09.51ID:01WTNDQb
自分の使い方が間違っているだけなのに文句を言うなよ。
0413NAME IS NULL
垢版 |
2020/10/29(木) 19:13:13.83ID:???
質問すみません。

環境:
- OS: Windows 10 (バージョン 2004, ビルド 19041.572)
- Visual Studio: Visual Studio 2019 Community (Version 16.7.6)
- ターゲット Framework: .NET Framework 4.0/4.7.2
- Driver: Microsoft Access Driver (*.mdb, *.accdb) 16.00.4999.1000 (Access 2016 Redist)

コード概要:
デーモンとして待ち受け、要求に応じてDB(主に Access accdb データベース)のデータを返すプログラムです。

現象:
ADODB.Connection をインスタンス化した connection を Open するとき、実行開始後初回〜数回は正常に値を取得できますが、数分時間をおいた後、再度 connection を Open すると、AccessViolationException が発生します:

```
ハンドルされていない例外: System.AccessViolationException: '保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。'
```

現状:
- デーモンのコンソールには、正常時には、結果が表示されますが、異常時(今回の現象)では「致命的なエラーです。」と表示されます:

```
致命的なエラーです。

ハンドルされていない例外: System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
場所 ADODB.ConnectionClass.Open(String ConnectionString, String UserID, String Password, Int32 Options)
場所 Project1.Class1.Get(String[] fields, NameValueCollection nameValueCollection) 場所 C:\Users\mona\source\repos\Project1\Project1\Class1.cs:行 196
```

- "AccessViolation|fatal ado.net|adodb connection open" 等で Google 検索すると、Close 漏れだとかの指摘がありますが、Close は必ずしています。(finally 節で connection.Close() しています) <https://okwave.jp/qa/q3428421.html>;
- netsh winsock reset で改善したという事例 <https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e41e16b-27b2-40e3-8b6c-83930103e7b8/attempted-to-read-or-write-protected-memory-on-any-sql-connection-open-after-installing-net?forum=netfxbcl>; がありましたので試しましたが改善しません。
- Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\Users\mona\Documents\db.accdb;Persist Security Info=False; のような接続文字列の代わりにODBCデータソースでシステムDSNを定義し、DSN=db を指定しても改善しません。
- Visual Studio を管理者権限で実行しても改善しません。
- 試しにコネクションを毎回新規作成していますが改善しません。

英語サイト等も見ましたが先行事例がなかなか見つからず苦慮しています。せめてヒントでもありましたらご教示いただければ幸いです。よろしくお願いいたします。
0414413
垢版 |
2020/10/29(木) 19:35:47.21ID:???
書き忘れました、データ量(レコード数)ですが、データは複数のテーブルに分かれており(特に JOIN などはしていません)、多いもので 3000件弱、少ないもので数十件です。
データ件数に関係なく発生します。
0415NAME IS NULL
垢版 |
2020/10/29(木) 21:15:01.75ID:???
ACCESSは、というかOFFICE全般で、サーバサイドでの実行はサポートされない
ACE.OLEDBはサービスで動作させる設計にはなってないらしいぞ
0416413
垢版 |
2020/10/30(金) 19:40:47.64ID:???
>>415
ありがとうございます。そもそもの使い方として想定されていなくて、せいぜい ASP.NET と組み合わせるのが関の山、といったところでしょうか。
SQLite の利用も検討します。

ちなみに、コードを精査したところ、読み出したいテーブルとは別のDB(別ファイル)にレコード追加をする時にコケているようです。
別DBへの接続を止めたらアクセス違反はなくなりました。
ただ、コード上は、それぞれ別の接続を使用していますし、デバッガでステップ実行する際も、コケない時とコケる時があるので、タイミングの問題なのかと考えています。
取り急ぎは、同じDBへの書き込みで回避できるか検討したいと思います。
0417NAME IS NULL
垢版 |
2020/11/02(月) 03:29:23.50ID:???
いや、ASP.NETでの動作もサポートされてないから
0418413
垢版 |
2020/11/03(火) 18:11:33.38ID:???
>>417
ありがとうございます。
サポート対象外とのこと、SQLiteなりSQL Server Express なりにDBを変えてみたいと思います。
本件クローズとします。
0419NAME IS NULL
垢版 |
2020/12/13(日) 21:51:38.83ID:???
tps://
youtube.com/watch?v=TTDVrOLz6MI
0420NAME IS NULL
垢版 |
2022/01/21(金) 02:33:21.35ID:???
小さな頃から優等生
0421NAME IS NULL
垢版 |
2023/02/02(木) 13:02:55.86ID:???
(  )y-~~ ( T)y-~~( T-)y-~~(T-T)y-~~
レスを投稿する


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