X



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

0146NAME IS NULL
垢版 |
2009/04/09(木) 15:59:01ID:???
ADO.NET単体では
MDBファイルの新規作成はできないのでしょうか?

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

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

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

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

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

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

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

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

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

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

>>ちょっと複雑なクエリを使って集計する必要がある場合
複雑なクエリで集計->複雑な条件で抽出&集計 になると思うのだが?
0165NAME IS NULL
垢版 |
2009/04/14(火) 16:32:38ID:???
複数テーブルの更新も簡単な抽出もできるよ
0166NAME IS NULL
垢版 |
2009/04/15(水) 21:19:49ID:???
>>165
SQL文を工夫する以外の方法である?
0167NAME IS NULL
垢版 |
2009/04/23(木) 18:02:43ID:???
なんか、急に書き込みがなくなったな・・・w
0168NAME IS NULL
垢版 |
2009/04/24(金) 02:27:01ID:???
大量データの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で行っています。
0169NAME IS NULL
垢版 |
2009/04/24(金) 03:12:39ID:???
10万回もCreateCommandして
10万回もパラメータ生成してりゃ遅くもなるわな
0173NAME IS NULL
垢版 |
2009/04/24(金) 08:54:54ID:???
そうはおもえないな
0174NAME IS NULL
垢版 |
2009/04/24(金) 12:08:16ID:???
そうともいえないんじゃない?
0175NAME IS NULL
垢版 |
2009/04/24(金) 18:20:53ID:???
で、つまりどうしろと?
0176NAME IS NULL
垢版 |
2009/04/24(金) 18:40:21ID:???
>>175
CreateCommandとパラメータ生成をforの外にだせ
つか、本気で言われないとわからないならプログラマ向いてないぞ

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

                    ふふん

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

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

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

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

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

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

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

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

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

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

MSDNライブラリよりは解説が多い分わかりやすいかもしれんが。
0199NAME IS NULL
垢版 |
2009/06/10(水) 13:28:53ID:4wnEGzyk
リファレンス部はそうだけど、それ以外の部分は
MSDNライブラリを探しながら体系的に見ていく事が
初心者にできるか って事だと思うが
#最低限の知識がないまま、いきなりMSDNライブラリを読む
#というのは、自分的には時間がもったいないと思う
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のがいいと思うけど・・・
レスを投稿する


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