- PR -

DataSetの再検索について

投稿者投稿内容
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-04-27 17:20
引用:

Fillメソッドを利用し先頭から1000件だけDataSetに取り込むという方法は
どうでしょうか?




華麗にスルーされていますが、

SQL Serverであれば、

SqlDataAdapter1.SelectCommand.CommandText = SQL文
SqlDataAdapter1.Fill(データセット名, 0, 1000, テーブル名)

で、DataSetにSQL文で取得できる先頭1000件だけを設定できるので、いきなり
1000件だけDataSetに設定し表示を行う。

# みなさんがスルーするということは、質問の内容を取り違えているかも・・・


[ メッセージ編集済み 編集者: Katze 編集日時 2006-04-27 17:21 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-04-27 17:37
引用:

Webアプリの場合、ブラウザからのリクエストの毎にDataSetを作るようになります。
Session変数に格納することも可能ですが、この場合は毎回シリアライズ/デシリアライズが行われるようになります。
こういった状況であれば、必要なデータのみを毎回取得するほうがよいかもしれません。



「DataGrid AllowCustomPaging」で検索すると面白いサンプルがありそうです。

例えば、
http://www.microsoft.com/japan/msdn/enterprise/pag/scalenethowto05.asp
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-04-27 23:14
引用:

R・田中一郎さんの書き込み (2006-04-27 16:52) より:

やはりDataSet は全件手元に持ってきて処理するんですね。
じゃあ、低帯域なWANでVPN組んだ場合って・・・((((;゚Д゚)))ガクガクブルブル


起動時にデータを読み込んでしまって、終了する前に書き戻すような仕組みに
すれば、ユーザはほとんどストレスを感じないで処理することができますよね。
そのためにDataSetはデータを取り込んでデータベースとの接続を切るような
形になっているのだと思います。

sarah
常連さん
会議室デビュー日: 2006/02/08
投稿数: 32
投稿日時: 2006-04-28 11:57
引用:

Katzeさんの書き込み (2006-04-27 17:20) より:
華麗にスルーされていますが〜以下略



そうなんですが、実際に取得できた件数30000件という数字は
取得することが前提です。そうすると先にCOUNT用のSQL文を
実行する必要があり結局2度検索を行う必要性が出てくると
思います。
COUNT用SQL文ならそんなに負荷がかからないので、2度SQLを
とばしても影響が無いように思われるかもしれませんが、元
のSQL文がSELECT DISTINCT 〜のようになっているケースも
あります。
Penguin
会議室デビュー日: 2006/03/01
投稿数: 13
投稿日時: 2006-04-28 13:16
元のSQLでROWNUMを取得するように変更する方法ではだめでしょうか?

@SQLを以下のようにし、30000件DataSetに取得する
コード:

SELECT ROWNUM,T1.*
  FROM (SELECT * FROM TABLE1 ORDER BY 1) T1



A呼出元アプリでフィルタする
コード:

Dim DataView1 as DataView = DataSet1.Tables("テーブル1").DefaultView 
DataView1.RowFilter = "ROWNUM <= 1000" 


sarah
常連さん
会議室デビュー日: 2006/02/08
投稿数: 32
投稿日時: 2006-04-28 17:06
DataViewオブジェクトの内容を新たなDataSetにコピーすることは
可能でしょうか?

[ メッセージ編集済み 編集者: sarah 編集日時 2006-04-28 17:54 ]

スキルアップ/キャリアアップ(JOB@IT)