我有一个时间序列加载到 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);
}
}
}
}