SqlCeDataReader.Seek Method
SqlCeDataReader を、指定したパラメータに一致するインデックス値が存在するレコードに配置します。
名前空間: System.Data.SqlServerCe
アセンブリ: System.Data.SqlServerCe (system.data.sqlserverce.dll 内)
構文
'宣言
Public Function Seek ( _
dbSeekOptions As DbSeekOptions, _
ParamArray index As Object() _
) As Boolean
public bool Seek (
DbSeekOptions dbSeekOptions,
params Object[] index
)
public:
bool Seek (
DbSeekOptions dbSeekOptions,
... array<Object^>^ index
)
public boolean Seek (
DbSeekOptions dbSeekOptions,
Object[] index
)
public function Seek (
dbSeekOptions : DbSeekOptions,
... index : Object[]
) : boolean
パラメータ
- dbSeekOptions
使用する DbSeekOptions。
- index
レコードのインデックス。
戻り値
ブール値。true の場合はカーソルが行に配置されています。
例外
例外の種類 | 条件 |
---|---|
SqlCeException | 値が見つからないか、他のエラーが発生しました。 |
解説
このメソッドは、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);
}
スレッド セーフ
この型の public static (Visual Basic では Shared ) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォーム
開発プラットフォーム
Windows Vista、Windows Mobile 5.0、Windows XP Professional with Service Pack 2 (SP2)、Windows Server 2003、Windows Mobile 2003 for Pocket PC、Windows CE 5.0
バージョン情報
.NET Framework および .NET Compact Framework
3.5 でサポート
.NET Framework
3.0 でサポート
.NET Compact Framework および .Net Framework
2.0 でサポート
参照
リファレンス
SqlCeDataReader Class
SqlCeDataReader Members
System.Data.SqlServerCe Namespace