Inquiridor
Quando usar DataSet, DataTable, DataReader???

Pergunta
-
Todas as Respostas
-
Fernando,
estou enviando esse link de um artigo que tira algumas dúvidas suas.http://www.microsoft.com/brasil/msdn/tecnologias/MSDNMagazine/MSAccesscomADONET.mspx
Espero te-lo ajudado.
Abraço
-
Se sua dúvida é entre DataSet e DataSet tipado, eu te diria que 99,999999% das vezes é o tipado.
Se for entre DataSet e DataTable, são sempre os dois, não tem jeito.
Se for entre DataSet e DataReader, DataReader é somente leitura e conectado. DataSet le, escreve, pesquisa, altera esquema, serializa, deserializa e opera desconectado. Obviamente, é mais pesado que DataReader.
-
Caro Fernando,
Se você procura apenas fornecer informações para exibição neste GridView eu aconselho a utilização do DataReader por questões performáticas, o DataReader é mais "leve" que os outros citadados por você isto faz com que o DataReader seja mais rápido, porém ele somente permite a leitura adiante (leitura para frente), mas se realmente seu objetivo é apenas exibição isto não causa nenhum inconveniente.
Abraços,
M. Sc. Márcio Luiz Rossato Gomes
Microsoft Innovation Center Curitiba
-
Utilizar DataReader pode te ocasionar algum problema caso você tenha paginação na sua listagem, isso ocorre pelo fato do DataReader ser Only-Forward.
Em muitos casos ele resolve e é mais otimizado, mas em paginação realmente não funciona.
Já um DataSet contém diversas DataTables, você pode trabalhar com um Banco de Dados Inteiros dentro de um DataSet, com relacionamentos Views (DataViews) e etc.
E a DataTable equivale a uma tabela somente, ela pssui as linhas (rows) e colunas.
Espero ter contribuido.
-
Ola Fernando,
Eis aqui um post que poderá ajudá-lo: http://weblogs.pontonetpt.com/israelaece/posts/3325.aspx -
Eu uso as seguintes regras:
-Para cadastros e páginas que não são acessadas frequentemente, uso DataSets tipados.
-Para páginas que são muito acessadas uso DataReader
Para performance, o DataReader é incomparável, é muito mais rápido.
Quanto a paginação, achei uma solução interessante.
Para uma pagina de listagem que existe no sistema, uso a procedure abaixo (minimizada, pois ela é bem grande):
create
procedure [spr_ExemploPaginacao(
@Pagina int,
@NumRegistros int,
@fila_id int,
@order varchar(4000)
)
AS begin
DECLARE @sql varchar(4000)
DECLARE @TempItems TABLE
(
ID int IDENTITY,
PEDIDO_ID int
)
INSERT INTO @TempItems (PEDIDO_ID)
SELECT
P.PEDIDO_ID
FROM
dbo.PEDIDOS
WHERE
fila_id = @fila_id
ORDER BY
CASE WHEN @ORDER = 'PEDIDO_ID' THEN P.PEDIDO_ID END ,
CASE WHEN @ORDER = 'PEDIDO_ID DESC' THEN P.PEDIDO_ID END DESC ,
CASE WHEN @ORDER = 'PEDIDO_DATA' THEN P.PEDIDO_DATA END ,
CASE WHEN @ORDER = 'PEDIDO_DATA DESC' THEN P.PEDIDO_DATA END
SELECT
p.PEDIDO_ID, p.campoB AS campoB, p.campoC AS campoC
FROM
@TempItems AS t
INNER JOIN [PEDIDOS]
AS P ON p.PEDIDO_ID = t.PEDIDO_IDAND
T.ID BETWEEN (@Pagina - 1) * @NumRegistros + 1 AND @Pagina * @NumRegistrosORDER
BY CASE WHEN @ORDER = 'PEDIDO_ID' THEN P.PEDIDO_ID END , CASE WHEN @ORDER = 'PEDIDO_ID DESC' THEN P.PEDIDO_ID END DESC , CASE WHEN @ORDER = 'PEDIDO_DATA' THEN P.PEDIDO_DATA END , CASE WHEN @ORDER = 'PEDIDO_DATA DESC' THEN P.PEDIDO_DATA ENDend
Ela cria uma tabela temporária, isso pode consumir um pouco de memória no servidor, porém nunca tive problemas com isso. Ela tem a vantagem de só retornar os pedidos que eu preciso. Por exemplo, se eu não usasse isso e tivesse 4000 registros, caso eu só quisesse os 10 últimos, eu teria que receber os 4000 e só exibir os últimos 50.
Bom, espero ter ajudado.
Um abraço,
Danilo Feltrini