- - PR -
DataSetの再検索について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-27 13:20
お疲れ様です。
検索により取得したレコードが30000件程度あったとします。 しかし表示用には1000件程度でいいので取得したレコードの 最初から1000件だけを取得したい場合、30000件が格納されて いるDataSetを加工して1000件に絞り込むことはできるので しょうか?つまり2度検索を行うことなく1度目に取得した DataSetを再利用できないかということです。 | ||||
|
投稿日時: 2006-04-27 13:35
DataViewクラスを使用すれば可能です。
RowFilterプロパティで条件絞込みも可能です。 Dim DataView1 as DataView = DataSet1.Tables("テーブル名").DefaultView DataView1.RowFilter = "任意の条件" #質問の趣旨を勘違いしていたようですね。 #失礼いたしました。m(__)m [ メッセージ編集済み 編集者: Penguin 編集日時 2006-04-27 13:37 ] [ メッセージ編集済み 編集者: Penguin 編集日時 2006-04-27 14:14 ] | ||||
|
投稿日時: 2006-04-27 14:08
Fillメソッドを利用し先頭から1000件だけDataSetに取り込むという方法は
どうでしょうか? [Visual Basic] Overloads Public Function Fill( _ ByVal dataSet As DataSet, _ ByVal startRecord As Integer, _ ByVal maxRecords As Integer, _ ByVal srcTable As String _ ) As Integer ↑HELPより startRecordに0,maxRecordsに1000を設定すれば・・・ # これだと次の1000件を参照するとき、また読み込みなおさ # なければダメなので実用的ではないかもしれませんが | ||||
|
投稿日時: 2006-04-27 14:32
上記の場合なら、Penguinさんのやり方かなー、と思うのですが、最初に DataSet で 30000件取得するより、検索結果にマッチするレコードカウントを取得して一定量を 超えた時に先頭から1000件程度取得するやり方の方が効率が良いように感じますが、 実際のところはどうなんでしょう? #結局、便乗質問ですね・・・ | ||||
|
投稿日時: 2006-04-27 14:44
DataSetがどこに存在するか、を考える必要があると思います。
Windowsアプリケーションならクライアントにはある程度メモリの余裕があると考えても良いでしょうし、さまざまな処理を行ったうえで最終的に一括で書き戻す、という方法が考えられます。 この場合は30000件を最初に取得してしまい、表示を絞りこむのがよいかもしれません。 Webアプリの場合、ブラウザからのリクエストの毎にDataSetを作るようになります。 Session変数に格納することも可能ですが、この場合は毎回シリアライズ/デシリアライズが行われるようになります。 こういった状況であれば、必要なデータのみを毎回取得するほうがよいかもしれません。 まぁ、その場合はDataSetではなくDataReaderを使うほうがよいかもしれませんが。 このように、利用するうえでの前提条件がないと、どの方法が効率的か、という話はできないと思います。 | ||||
|
投稿日時: 2006-04-27 16:19
話が遡ってしまうのですが、このやり方ですと1000件を抽出することはできますか? "任意の条件"に"ROWNUM <= 1000"を指定する場合、SELECT文中にROWNUMを追記する 必要がありますが、このときORDER BYが無効になります。 これを避けるには元のSQL文を変更してROWNUMとORDER BYの意味が同じように変更 する必要があると思うのですが、元のSQL文を変更せずに1000件取得する方法は ありますでしょうか? | ||||
|
投稿日時: 2006-04-27 16:52
やはりDataSet は全件手元に持ってきて処理するんですね。 じゃあ、低帯域なWANでVPN組んだ場合って・・・((((;゚Д゚)))ガクガクブルブル | ||||
|
投稿日時: 2006-04-27 17:04
sarahさんの仰る通り、この方法だと元のSQLを変更する必要がありますね。 元のSQLを変更しないのであれば、 @30000件を読み込んだDataSetをループでまわして、1000件分新しいDataSetに取り込むか、 A1000件分読み込む別のSQLを用意し、DataSetに取り込む 方法が考えられると思いますが、いかがでしょうか? #他によい案がある方はフォローをお願いいたします。 |