Pular para o conteúdo principal

Data Tables – Parte II

No post anterior demonstrei como criar um objeto DataTable na memória com a estrutura de campos, seus tipos e tudo mais.

Pode parecer um pouco estranho trabalhar com este tipo de objeto desvinculado de um banco de dados, mas, o que eu pretendo trazer para você é um pouco mais de conhecimento do funcionamento das classes do framework .Net.

Quando estamos trabalhando com bancos de dados é muito comum nos concentrarmos em como ler e persistir os dados no servidor, entretanto, existem situações em que podemos precisar trabalhar com os dados já na memória, quer seja por impossibilidade de conexão tendo de fazer o trabalho off line, quer seja para fazer todo o trabalho antes de persistir no banco ou, ainda, trabalhar com os dados já carregados evitando conexões desnecessárias com o banco.

No post de hoje vou dar um exemplo de como inserir registros na tabela que criamos na primeira parte.

Inserindo registros na DataTable

Primeiramente crie um objeto do tipo DataRow declarando apenas, sem criar uma nova instância. Para isso, lembre-se de acrescentar "”System.Data” nos usings do seu programa.

Em seguida, use o método “NewRow()” da DataTable que criamos. Isto irá criar uma instância do DataRow com as colunas da tabela de origem.

Este objeto é na verdade um IEnumerable sendo que cada ítem corresponde a uma coluna do DataTable. Você pode acessar estes campos através de um índice baseado em zero ou através dos nomes das colunas criadas.

Para finalizar, acrescente o objeto DataRow à tabela passando-o como parâmetro para o método “AddRow()”.

Acrescente a listagem abaixo para o código do primeiro post e inclua os registros:

    5 // acrescentar registros

    6 DataRow registro = TabelaDeExemplo.NewRow();

    7 registro["Tipo"] = "Guitarra Elétrica";

    8 registro["Marca"] = "Fender";

    9 registro["Modelo"] = "Telecaster";

   10 registro["AnoDeFabricacao"] = 1990;

   11 TabelaDeExemplo.Rows.Add( registro );

   12 

   13 registro = TabelaDeExemplo.NewRow();

   14 registro["Tipo"] = "Guitarra Elétrica";

   15 registro["Marca"] = "Fender";

   16 registro["Modelo"] = "Stratocaster";

   17 registro["AnoDeFabricacao"] = 1992;

   18 TabelaDeExemplo.Rows.Add( registro );

   19 

   20 registro = TabelaDeExemplo.NewRow();

   21 registro["Tipo"] = "Guitarra Elétrica";

   22 registro["Marca"] = "Gibson";

   23 registro["Modelo"] = "Les Paul Standard";

   24 registro["AnoDeFabricacao"] = 1995;

   25 TabelaDeExemplo.Rows.Add( registro );

Neste código adicionamos três registros e o próximo passo é verificar como listar estes registros.

Listando os registros acrescentados

Novamente existe um número muito grande de maneiras de fazer isto. Você pode percorrer os registros da tabela usando um laço “for…” acessando cada linha usando um índice baseado em zero e nomeando os campos, como na listagem abaixo:

    5 // lista os dados usando for

    6 Console.WriteLine( "lista os dados usando \"for\"" );

    7 for( int i = 0; i < TabelaDeExemplo.Rows.Count; i++ )

    8 {

    9     Console.WriteLine( "{0:000000}\t{1}\t{2}\t{3}\t{4}",

   10         TabelaDeExemplo.Rows[i]["IdInstrumento"],

   11         TabelaDeExemplo.Rows[i]["tipo"],

   12         TabelaDeExemplo.Rows[i]["mARca"],

   13         TabelaDeExemplo.Rows[i]["modelo"],

   14         TabelaDeExemplo.Rows[i]["anodefabricacao"] );

   15 }

Esta listagem vai colocar na tela o seguinte resultado:

lista os dados usando "for"
000001  Guitarra Elétrica  Fender  Telecaster  1990
000002  Guitarra Elétrica  Fender  Stratocaster  1992
000003  Guitarra Elétrica  Gibson  Les Paul Standard  1995

Também é possível usar o laço foreach na qual acessamos uma instância de cada registro com o objeto DataRow:

    5 // lista os dados com foreach

    6 Console.WriteLine( "listando os dados com \"foreach\"" );

    7 foreach( DataRow reg in TabelaDeExemplo.Rows )

    8 {

    9     Console.WriteLine( "{0:000000}\t{1}\t{2}\t{3}\t{4}",

   10         reg["IdInstrumento"],

   11         reg["tipo"],

   12         reg["mARca"],

   13         reg["modelo"],

   14         reg["anodefabricacao"] );

   15 }

Pelo código acima você precisa perceber algumas coisas:

  1. A propriedade “Rows” do objeto do tipo DataTable retorna uma coleção de objetos do tipo DataRow.
  2. Podemos acessar as colunas que compõem o registro usando os nomes dos campos.
  3. Embora a linguagem C# seja case sensistive o acesso ao nome dos campos não é. É por isso que pudemos acessar o campo “AnoDeFabricacao” como “anodefabricacao” (linha 10).

Eu prefiro um código um pouco mais genérico, no qual eu não preciso passar os nomes dos campos. Pode ser que em alguma situação eu não saiba disto.

Assim, eu posso acessar cada linha da tabela com o laço foreach e também cada coluna do registro também com este tipo de laço.

O código fica assim:

    5 // percorre cada linha da tabela

    6 foreach( DataRow row in TabelaDeExemplo.Rows )

    7 {

    8     // percorre as colunas do registro e imprime

    9     foreach( DataColumn col in row.Table.Columns )

   10     {

   11         Console.WriteLine( "{0}: {1}",

   12             col.ColumnName.PadRight(20, '.'), row[col.ColumnName].ToString() );

   13     }

   14 

   15     // separador de registros

   16     Console.WriteLine( "-".PadRight( 80, '-' ) );

   17 }

Esta listagem mostra cada campo e seu conteúdo em uma linha da tela formatados. A saída deste código na tela ficaria da seguinte forma:

IdInstrumento.......: 1
Tipo................: Guitarra Elétrica
Marca...............: Fender
Modelo..............: Telecaster
AnoDeFabricacao.....: 1990
--------------------------------------------------------------------------------
IdInstrumento.......: 2
Tipo................: Guitarra Elétrica
Marca...............: Fender
Modelo..............: Stratocaster
AnoDeFabricacao.....: 1992
--------------------------------------------------------------------------------
IdInstrumento.......: 3
Tipo................: Guitarra Elétrica
Marca...............: Gibson
Modelo..............: Les Paul Standard
AnoDeFabricacao.....: 1995





Com isto, você já consegue trabalhar com inserção e listagem de dados  no objeto DataTable.



No próximo post veremos como listar a estrutura da tabela criada.

Postagens mais visitadas deste blog

Como gerar scripts para exportar dados no SQL Server 2008

Uma das tarefas mais comuns no trabalho com desenvolvimento de software que consome dados em bancos como o SQL Server 2008 é a necessidade de em algum momento precisarmos exportar os dados de um banco para outro. Quer seja para realizar testes ou fazer simulações existem várias maneiras de se fazer isto. Neste post eu quero demonstrar um recurso do SQL Server Management Studio (SSMS) que permite realizar esta tarefa rapidamente.Para os que estão acostumados a usar esta ferramenta, já devem saber que é possível gerar scripts para o schema e também transferir os dados entre dois bancos distintos. Isto pode ser feito se o SSMS puder conectar-se com as duas bases, de origem e destino. No exemplo que vou dar, o objetivo é gerar o script apenas para uma tabela do banco de dados de exemplo da Microsoft – Northwind.1. Iniciando o assistenteO assistente deve ser iniciado clicando com o botão direito do mouse sobre o banco onde se encontra a tabela a qual iremos gerar o script. Deve se clicar n…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…