Pergunta

Eu tenho uma consulta SQL que pode trazer de volta um grande número de linhas através de um DataReader. Só agora eu consultar o DB transformar o conjunto de resultados em uma lista (de) e os dados de ligação a grade à lista.

Isso pode resultar ocasionalmente em um tempo limite devido ao tamanho do conjunto de dados.

Eu tenho atualmente uma configuração de três teir onde pela UI está agindo na lista de objetos na camada de negócios.

Alguém pode sugerir a melhor abordagem para implementar o carregamento lento neste scenatrio? ou há alguma outra maneira de implementar isso corretamente?

Atualmente, estou usando Visual Studio 2005, .NET 2.0

EDIT: Como seria paginação ser usado neste caso?

Foi útil?

Solução

LINQ to SQL parece fazer sentido na sua situação.

Caso contrário, se por qualquer razão, você não quer usar LINQ to SQL (por exemplo, você está em .NET 2.0), considere escrever um iterador que lê o DataReader e converte-lo para o objeto apropriado:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

Outras dicas

Você precisa trazer de volta todos os dados de uma vez? Você poderia considerar paginação.

paginação pode ser a melhor solução. Se você estiver usando SQL Server 2005 ou maior, houve novo recurso adicionado. ROWNUMBER () :

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

Há um exemplo por David Hayden que é muito útil em demonstrar a SQL.

Este método iria diminuir o número de registros retornados, reduzindo o tempo total de carga. Isso não significa que você terá que fazer um pouco mais para rastrear onde você está na seqüência de registros, mas vale a pena o esforço.
A técnica de paginação norma exige tudo para voltar a partir do banco de dados e, em seguida, ser filtrados na camada intermediária, ou camada de cliente (code-behind), este método reduz os registros a um subconjunto mais manejável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top