2017-03-02 7 views
1
connection.Open(); 
var cmd = new SqlCommand("SELECT TOP 1000 [Id] ,[Name] FROM [SomeBase]", connection); //Here 
context.MaxID = 100; 
int en = 5; //Maximum number of rows in the slice 
int iter = 0; //Iterator for each single row in the slice 
try 
{ 
    SqlDataReader reader = cmd.ExecuteReader(); 
    if(reader.HasRows) 
    { 
     while (iter < en) //I need 1-5 rows in first iteration, 6-10 in second... 
     { 
      iter++; 
      reader.Read(); 
      context.TextLog += String.Format("{0}\t{1}\n", 
      reader.GetInt64(0), 
      reader.GetString(1)); 
     } 
    } 
    reader.Close(); 
} 

結果からスライスで行を取得しようとしています。 私は期待する:最初の5つのスクリプトから終了します。次の開始は2番目の5つの結果(6-10)などとなります。 どのように私はそれを管理することができますか?.NETを使用してSQLReaderでスライスによるクエリ結果を読み取る方法

+0

データベースサーバに、LIMIT/FETCHとOFFSETの部分のみを必要とするように指示します。あなたが1000の結果がほしいと言って、それを放棄してほしいと言ってはいけません。 –

+0

[SQL Serverで結果をページングする最適な方法は何ですか?](http://stackoverflow.com/questions/109232/what-is-the-best-way-to-paginate-results-in-sql-サーバ) – bbsimonbb

答えて

0

読者は、値を取得するためにオープンで利用可能なコレクションが必要です。クエリーを何度も繰り返し実行する場合、DataTableを使用してこの要件を満たすことができます。あなたはDataTableのは、あなたがこのケースで.ToList()のために代わり.CopyToDataTable()を利用することができる手段として、結果が必要な場合は、メソッドの戻り値の型がList<DataRow>

ための代わり DataTableだろう

// populate the DataTable using adapter 
SqlDataAdapter adapter = new SqlDataAdapter(); 
adapter.SelectCommand = new SqlCommand("SELECT TOP 1000 [Id] ,[Name] FROM [SomeBase]", connection); 
adapter.Fill(dataset); 
// Call the method whenever you need Slice 
// Which will give you a List<DataRow> 
public List<DataRow> GetMySlice(DataTable inputDataTable, int minSlice, int maxSlice) 
{ 
    return inputDataTable.AsEnumerable() 
         .Skip(minSlice) 
         .Take(maxSlice) 
         .ToList(); 
} 

:そのためには、次の方法を使用することができます

0

まだページネーションが必要な場合は、MS SQL Serverを使用して、クエリSELECT句, ROW_NUMBER() OVER (ORDER BY <ColumnName>)に追加してSELECT *とラップしてください。パラメーターを使用してWHERE節を使用する。

SELECT * FROM 
(
    SELECT [Id] ,[Name], ROW_NUMBER() OVER (ORDER BY <ColumnName>) AS RNUM FROM [SomeBase] 
) AS T 
WHERE (T.RNUM BETWEEN @from AND @to) 
関連する問題