2017-02-17 8 views
0

私は以下のSqlCommandを持っています。リストの作成(listToUse)を一度に500個のエントリーに分解したいと思います。私はSQLでこれを非常に簡単に行うことができますが、コードからストアドプロシージャを呼び出すので、ストアドプロシージャを複数回呼び出すことができます。コード内のSqlCommandで一度に500行を選択してください

私は行を選択したいと思います

  • 0呼び出し方法GenereateUnpackConfigList(cmd)
  • 501から1000の呼び出し方法GenereateUnpackConfigList(cmd)ので

listToUse上500には、プロパティを持つクラスのシンプルなコレクションです。

ご協力いただきありがとうございます。

コード:

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 

cmd.CommandText = "SP_RPT_V5_LS_EXP_GetOutputsForUnpackingByBatchID"; 
cmd.CommandType = CommandType.StoredProcedure; 

SqlParameter param = new SqlParameter("@BatchID", BatchID); 
param.Direction = ParameterDirection.Input; 
param.DbType = DbType.String; 
cmd.Parameters.Add(param); 

listToUse = GenereateUnpackConfigList(cmd); 
+0

あなたは列がコマンドから返さされているかを知っている:

public static class Extensions { public static IList<T> PagedList<T>(this IList<T> source, int pageIndex, int pageSize) { var list = new List<T>(); list.AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList()); return list; } } 

拡張機能を呼び出す例:それはこのような何かを見ることができますか?それに基づいて、クラスを作成することができます。 cmd.ExecuteReader()メソッドを使用して、データが格納されたSQLDataReaderを取得します。読者をループし、毎回クラスのオブジェクトを作成し、それをリストに追加します。ストアドプロシージャから返されるデータに関する情報を共有します。私は詳細な答えを提供することができます。 –

+1

ページングを使用するストアドプロシージャを書き換えますか? – Fran

+0

SQL Server ** 2012 **以降では、[OFFSET-FETCH](https://www.mssqltips.com/sqlservertip/2362/overview-of-offset-and-fetch-feature-of- sql-server-2012 /)features –

答えて

1

はいストアドプロシージャを使用してそれを行うことができます。ただ、

Select Top 500 * 
from <Your-table-name> 
order by Id desc 

を使用して、次の関数呼び出しでそれを渡すと、クライアントコードのみを経由して拡張メソッドを、これを制御するには条件

Select Top 500 * 
from <Your-table-name> 
where Id < last-record-id 
order by Id desc 
+0

ありがとうございます。はい、あなたはSQLで限界を使うことができます。しかし、私はそれをSQLCommandとしてコードを行う必要があります。 SELECT [3,2] * FROM MyTable ORDER BY MyColumn/*仮説構文*/ は、3行目から2行目、つまり3行目と4行目を返します。 – Abe

+0

はい、あなたは正しいです。あなたは 'Limit'を使うこともできますが、これは' MySql'でのみサポートされています。 「SQL」の場合、「Top 500」は同等です。 –

+0

ありがとうございます。はい、私はこれのためのいくつかのリンクを例えば のために行きましたhttp://stackoverflow.com/questions/758186/how-to-get-n-rows-starting-from-row-m-from-sorted-table- in-t-sql しかし、私はコードでそれを行う必要があると述べた。 – Abe

0

を追加できるように、最後のレコードのIDを取得し保存しますあなたの結果セットをページするために実装することができます。

public void test(List<MyObject> listToUse, int pageSize = 500) 
{ 
    var firstBatch = listToUse.PagedList(1, pageSize); 
    var secondBatch = listToUse.PagedList(2, pageSize); 
} 
関連する問題