SqlCeCommand.SetRange メソッド
アセンブリ: System.Data.SqlServerCe (system.data.sqlserverce.dll 内)

Public Sub SetRange ( _ dbRangeOptions As DbRangeOptions, _ startData As Object(), _ endData As Object() _ )
Dim instance As SqlCeCommand Dim dbRangeOptions As DbRangeOptions Dim startData As Object() Dim endData As Object() instance.SetRange(dbRangeOptions, startData, endData)
public: void SetRange ( DbRangeOptions dbRangeOptions, array<Object^>^ startData, array<Object^>^ endData )
public function SetRange ( dbRangeOptions : DbRangeOptions, startData : Object[], endData : Object[] )


このメソッドは、SELECT ステートメントの代わりに使用して、ベース テーブルから行セットをより速く取得することを目的としています。SELECT ステートメントの WHERE 句の代わりに SetRange を使用して、インデックス値に基づいて行セットをすばやく取得できます。たとえば、従業員 ID が 1 から 5 までの従業員を取得する場合、SELECT ステートメントを実行することもできますが、従業員 ID のインデックスに 1 から 5 までの範囲を設定すると、パフォーマンスが大幅に向上します。
このメソッドを使用するためには、CommandType を TableDirect に、有効なテーブル名を CommandText に、指定したベース テーブルの有効なインデックス名を IndexName に、それぞれ設定する必要があります。SetRange を使用した場合、ExecuteReader から返される SqlCeDataReader は、指定したインデックス内のキー値が範囲に一致する行だけを返します。
範囲が指定された SqlCeDataReader で Seek を使用した場合、Seek は、指定した範囲内の行だけを対象とします。SetRange の詳細については、OLE DB のドキュメントの「IRowsetIndex::SetRange」を参照してください。

この例では、インデックスを使用して、Orders テーブルから SqlCeDataReader にデータを取得します。SetRange メソッドによって Seek に指定されたインデックスの範囲。
Try Dim conn As New SqlCeConnection("Data Source = MyDatabase.sdf") conn.Open() Dim cmd As SqlCeCommand = conn.CreateCommand() cmd.CommandType = CommandType.TableDirect cmd.IndexName = "Orders_PK" cmd.CommandText = "Orders" ' We are interested in orders that match Order ID = 10020 ' cmd.SetRange(DbRangeOptions.Match, New Object() {10020}, Nothing) Dim reader As SqlCeDataReader = cmd.ExecuteReader(CommandBehavior.Default) While reader.Read() MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date"))) End While ' Now we are interested in orders with Order ID between (10020, 10050) ' cmd.SetRange(DbRangeOptions.InclusiveStart Or DbRangeOptions.InclusiveEnd, New Object() {10020}, New Object() {10050}) reader = cmd.ExecuteReader(CommandBehavior.Default) ' Now seek to Order ID = 10045 ' Dim onRow As Boolean = reader.Seek(DbSeekOptions.FirstEqual, New Object() {10045}) ' Now ,the reader will return rows with Order ID >= 10045 <= 10050 ' because the range was set to (10020, 10050) ' If onRow Then While reader.Read() MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date"))) End While End If Catch e As Exception MessageBox.Show(e.Message) End Try
try { SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf"); conn.Open(); SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.TableDirect; cmd.IndexName = "Orders_PK"; cmd.CommandText = "Orders"; // We are interested in orders that match Order ID = 10020 // cmd.SetRange(DbRangeOptions.Match, new object[] { 10020 }, null); SqlCeDataReader reader = cmd.ExecuteReader(CommandBehavior.Default); for (int i = 1; reader.Read(); i++) { MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"])); } // Now we are interested in orders with Order ID between (10020, 10050) // cmd.SetRange(DbRangeOptions.InclusiveStart | DbRangeOptions.InclusiveEnd, new object[] { 10020 }, new object[] { 10050 }); reader = cmd.ExecuteReader(CommandBehavior.Default); // Now seek to Order ID = 10045 // bool onRow = reader.Seek(DbSeekOptions.FirstEqual, new object[] { 10045 }); // Now ,the reader will return rows with Order ID >= 10045 <= 10050 // because the range was set to (10020, 10050) // if (onRow) { for (int i = 1; reader.Read(); i++) { MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"])); } } } catch (Exception e) { MessageBox.Show(e.Message); }


Windows CE, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows XP Professional x64 Edition, Windows XP SP2
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- SqlCeCommand.SetRange メソッドのページへのリンク