0

SQL Server にロードされた時系列があります。クエリを実行してから、複数のタスクが SProc から結果を順番に読み取れるようにする必要があります。

Googleで見つけたものから、SProcまたはLINQクエリ/ステートメントを実行できるようです。私は現在LINQに慣れていません(SProcが好ましいアプローチです)。どちらか一方に利点はありますか?

SProc を実行した後、データに順次アクセスするにはどうすればよいですか? 私は、SProc が私の ObjectContext を変更するだけだと仮定しています。この場合、各タスクがどの行にあったかをカウントし、このカウンターで ObjectContext の各パラメーターにアクセスして必要な値を取得する必要がありますか?

SProc コードは次のとおりです。

CREATE PROCEDURE [dbo].[DataRetrieval]
    @StartTime      Time(0)     ='00:00:00',
    @EndTime        Time(0)     ='00:00:00',
    @StartDate      Date        ='2012-01-01',
    @EndDate        Date        ='2012-01-01',
    @Location           nchar(6)    ='Scotland'
AS
/*
Author: Hans
Date: 09-01-2013
Purpose: Used to load a large section of data into memory.
*/
SET NOCOUNT ON;
BEGIN

SELECT *
FROM 
    dbo.Data
WHERE
    LOCATION = @Location
    AND ( Date = @StartDate  AND Time >= @StartTime
               OR Date > @StartDate )
    AND ( Date = @EndDate  AND Time < @EndTime
               OR Date < @EndDate )
ORDER BY
    DATE, TIME
END

USRの編集...

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "dbo.Data_GetStoredProcedureList";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandTimeout = 10;
                cmd.Connection = connection;

                try
                {
                    connection.Open();

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader != null && reader.HasRows)
                        {
                            cancelTask.ThrowIfCancellationRequested();

                            while (reader.Read())
                            {
                                Entity rowData = new Entity();
                                rowData.RoutineName = reader["Routine_Name"].ToString();
                                rowData.ParameterName = reader["Parameter_Name"].ToString();
                                rowData.DataType = reader["Data_Type"].ToString();

                                sProcListRetrieval.Results.Add(rowData);
                            }
                        }
                    }
                }
4

1 に答える 1

1

数百万のオブジェクトをメモリに簡単にバッファできます。T-SQL の結果を a にバッファリングし、Listそのリストをワーカー スレッドに渡します。

于 2013-01-09T15:15:27.577 に答える