2016-07-05 12 views
1

すべてのデータセットテーブルを一度に(フォームの初期ロード時に)ロードする方が効率的ですか、必要に応じてデータベースを複数回ヒットする方が良いでしょうか?データセットテーブルを読み込むときに効率的な方法は何ですか?

たとえば、グリッドコントロールがあり、その上にALLと負荷電流の2つのチェックボックスがあります。最初のロード中に、これらのSQL select文の両方を1つのデータセットにロードする必要があります。 CheckedChangeイベント中に最初のフォームの読み込み時にロードされた別のテーブルに、グリッドコントロールのバインドを変更しますか?

OR

データベースにヒットし、CheckedChangeイベント中に毎回異なるテーブルをロードする方が良いでしょうか?

おかげで、

+0

おそらく、上記のいずれもありません。 CurrentがAllのサブセットである場合、Load allとCurrentをクリックすると、WHERE句で使用したのとほぼ同じテキストを使用して結果をフィルタリングするRowFilterを適用します。 – Plutonix

+0

Plutonix、それはallのサブセットです。私は間違いなくあなたが提案したことをします。私はビジュアルスタジオ2015で両方の方法でテストしようとしていましたが、両方の方法でデータセットをロードするのにかかる時間を見ていましたが、そのようなことをどうやって行うのかわかりません。私はちょうどアップグレードしたので、私はその地域でもっと掘り起こす必要があるかもしれません。しかし、あなたの入力のためにありがとう:) – mee123

答えて

-1

あなたが大量のデータ取得している場合は読み取り専用このようなルーチンを試してみてください。

Function GetDataTable(ByVal SQL As String, Optional ByVal ConnectString As String = "", Optional ByVal SingleRow As Boolean = False) As DataTable ' returns read only Datatable 
    Try 
     If ConnectString.Length = 0 Then ConnectString = g.OISConnectString() 
     Using con As New System.Data.SqlClient.SqlConnection(ConnectString) 
      Dim rdr As Data.SqlClient.SqlDataReader 
      con.Open() 
      Dim cmd As New SqlCommand(SQL, con) 
      If SingleRow Then 
       rdr = cmd.ExecuteReader(CommandBehavior.SingleRow Or CommandBehavior.CloseConnection) 
      Else 
       rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection) 
      End If 
      Dim dt As New DataTable 
      dt.Load(rdr) 
      rdr.Close() 
      Return dt 
     End Using 
    Catch ex As Exception 
     MsgBox(ex.Message, , "GetDataTable") 
     Return Nothing 
    End Try 
End Function 

それが使用するデータテーブル/データセットのオーバーヘッドを通過するOワット

"Current"がすでに取得した行のサブセットである場合は、DatatableからDataviewを作成し、そのビューをグリッドのデータソースとして使用します。データビューフィルタを変更して、「現在の」レコードを表示します。

+0

その機能は多くの点で非効率です...実際にはOPの懸念に対処しないので、この場合は投稿コードも役立ちません。 – Codexer

+0

非効率 - どのように?私は、このルーチンを検索のために複数の1000行をロードするために常時使用しているので、私が知りたいのですが、できるならば、より良いパフォーマンスを得たいと思います。 – rheitzman

関連する問題