トップ回答者
SqlCommand.SetRangeメソッドまたは,SqlDataReader.Seekメソッド での範囲指定について

質問
-
質問したい点としては,複数列に1つのプライマリーキー制約と1つのインデックス名を設定したTBLに対する,
SetRangeメソッドやSeekメソッドの動作です。
以下にサンプルコードと一緒に状況を説明いたします。どなたかご存知の方,よろしくお願いいたします。
処理1.複数列に1つのプライマリーキー制約とインデックス名を設定します。
// 複数列(ID, Name, Age)にプライマリーキー制約とインデックス名(idx_sample)を指定
ALTER TABLE Sample ADD CONSTRAINT idx_sample PRIMARY KEY (ID(注4), Name, Age)
処理2.SetRangeやSeekメソッドを発行します。その場合,以下の注1,注2に指定する範囲をどうしたらよいか悩んでおります。
// SetRangeメソッド(インデックスを基にした値の範囲(1~99)を指定)
SqlCommand.SetRange(DbRangeOptions.InclusiveStart | DbRangeOptions.InclusiveEnd,
new object[] { 注1 }, new object[] { 注2 });または,
// Seekメソッド(開始インデックスを指定)
Seek(DbSeekOptions.FirstEqual, new object[] { 注3 });上記のようなコードを書き,試しに実行してみると,注1から注3に指定した値は,ID列の値を判定して動作しました。
動作で納得できない点は,TBLでID列のみがプライマリーキー,インデックスが設定してあれば納得できますが,
複数列で1つのキーとインデックス名を設定している点です。
注1~注3には,通常,どのような値を指定するのでしょうか。
よろしくお願いいたします。
回答
-
こんにちは、naginoです。使用されている .NET Framework のバージョンはいくつでしょうか。2.0 の場合、SqlCommand クラスには SetRange メソッドが見当たらないのですが・・・。なお、SqlCeCommand クラスの SetRange メソッドで複数列を対象にした範囲の指定方法であれば、以下にサンプルがありました。引数も配列になっていますし、インデックス中の列数が 1つであっても複数であっても、インデックスに含まれていれば問題なさそうです。SqlDataReader クラスについても、Seek メソッドが見当たらないのですが・・・。SqlCeDataReader クラスでしょうか。引数の型や特徴から、上記の SqlCeCommand クラスと同様の方法でできると推測されます。ご質問のクラスのリファレンスが見つからないことには何ともいえませんが、多少なりともご参考になれば幸いです。
-
教えていただきありがとうございます。
>インデックス中の列数が 1つであっても複数であっても、インデックスに含まれていれば問題なさそうです。
上記は,わたしが知りたかったことです。
あと,投稿メッセージにSqlCeCommand/SqlCeDataReaderクラスと書かなければならないところを間違って省略してしまいました。
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqldatareader_members(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.data.sqlserverce.sqlcedatareader.seek(VS.80).aspx
を参考にして調べてみます
すべての返信
-
こんにちは、naginoです。使用されている .NET Framework のバージョンはいくつでしょうか。2.0 の場合、SqlCommand クラスには SetRange メソッドが見当たらないのですが・・・。なお、SqlCeCommand クラスの SetRange メソッドで複数列を対象にした範囲の指定方法であれば、以下にサンプルがありました。引数も配列になっていますし、インデックス中の列数が 1つであっても複数であっても、インデックスに含まれていれば問題なさそうです。SqlDataReader クラスについても、Seek メソッドが見当たらないのですが・・・。SqlCeDataReader クラスでしょうか。引数の型や特徴から、上記の SqlCeCommand クラスと同様の方法でできると推測されます。ご質問のクラスのリファレンスが見つからないことには何ともいえませんが、多少なりともご参考になれば幸いです。
-
教えていただきありがとうございます。
>インデックス中の列数が 1つであっても複数であっても、インデックスに含まれていれば問題なさそうです。
上記は,わたしが知りたかったことです。
あと,投稿メッセージにSqlCeCommand/SqlCeDataReaderクラスと書かなければならないところを間違って省略してしまいました。
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqldatareader_members(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.data.sqlserverce.sqlcedatareader.seek(VS.80).aspx
を参考にして調べてみます