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

Public Function Seek ( _ dbSeekOptions As DbSeekOptions, _ ParamArray index As Object() _ ) As Boolean
Dim instance As SqlCeDataReader Dim dbSeekOptions As DbSeekOptions Dim index As Object() Dim returnValue As Boolean returnValue = instance.Seek(dbSeekOptions, index)
- dbSeekOptions
使用する DbSeekOptions。
ブール値。true の場合はカーソルが行に配置されています。


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


Weblioに収録されているすべての辞書からSqlCeDataReader.Seek メソッドを検索する場合は、下記のリンクをクリックしてください。

- SqlCeDataReader.Seek メソッドのページへのリンク