Objectos
DataSet, uma parte de chave de acesso a dados no Microsoft .NET Framework, são objectos de memória que podem conter tabelas, vistas e relações. Este artigo demonstra como preencher um objecto de
DataSet com os resultados de uma ou mais consultas de base de dados e como aceder a esses dados depois de este é carregado para o objecto
DataSet.
Requisitos
A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
- Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server
- Microsoft SQL Server 7.0, Microsoft SQL Server 2000 ou Microsoft Data Engine com a base de dados de exemplo Pubs instalado
- Microsoft Visual Studio .NET
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
- Terminologia de base de dados
- Linguagem de consulta estruturada (SQL)
Preencher um DataSet
Utilizando uma variedade de objectos no espaço de nomes
System.data, pode ligar a um servidor de base de dados, executar uma consulta e os resultados tenham colocados num objecto de
DataSet. O
DataSet é um objecto desligado. Por conseguinte, depois os dados são carregados, a ligação à base de dados já não é utilizada até que pretende carregar mais dados ou actualizar o servidor com as alterações efectuadas à cópia de memória da informação.
Para carregar dados a partir de uma base de dados para um
DataSet, siga estes passos:
- Inicie o Visual Studio NET..
- Crie um novo projecto de aplicação de consola no Visual C#. NET. Visual Studio .NET cria uma classe estática, juntamente com um procedimento principal vazio.
- Certifique-se de que o projecto referencia os espaços de nomes do sistema e System.data.
- Utilize a instrução a utilizar em espaços de nomes System.data.SqlClient, System.data e sistema para que não é necessário para qualificar as declarações destes espaços de nomes mais tarde no código. Tem de utilizar estas instruções antes de quaisquer outras declarações.
using System;
using System.Data;
using System.Data.SqlClient;
- O primeiro passo para obter dados da base de dados para o DataSet é estabelecer uma ligação de base de dados, que requer um objecto System.Data.SqlClient.SqlCommand e uma cadeia de ligação. A cadeia de ligação no código a seguir liga um servidor de SQL Server que está localizado no computador local (o computador onde o código está a ser executado). Tem de modificar esta cadeia de ligação conforme apropriado para o ambiente. Depois de criar o objecto SqlConnection, chamar o método Open desse objecto para estabelecer a ligação de base de dados reais.
string sConnectionString;
sConnectionString = "Password=myPassword;User ID=myUserID;"
+ "Initial Catalog=pubs;"
+ "Data Source=(local)";
SqlConnection objConn
= new SqlConnection(sConnectionString);
objConn.Open();
- Crie um objecto de ' DataAdapter ', que representa a ligação entre a base de dados e o objecto DataSet. Pode especificar SQL ou outro tipo de comando é utilizado para obter dados como parte do objecto de construtor do ' DataAdapter '. Este exemplo utiliza uma instrução de SQL que obtém registos da tabela Authors na base de dados Pubs.
SqlDataAdapter daAuthors
= new SqlDataAdapter("Select * From Authors", objConn);
- Deve declarar e criar uma instância de um objecto DataSet, momento em que pode fornecer um nome para o inteiro DataSet antes de começar a carregar quaisquer dados. O nome pode conter várias tabelas distintas.
DataSet dsPubs = new DataSet("Pubs");
- A classe SqlDataAdapter fornece dois métodos, preenchimento e FillSchema, que são cruciais para carregar estes dados. Ambos os métodos carregar informações para um DataSet. Preencher carrega os dados propriamente ditos e FillSchema carrega todos os metadados disponíveis sobre uma tabela específica (como, por exemplo, nomes de colunas, chaves primárias e restrições). Uma boa maneira de tratar os carregamento de dados consiste em executar FillSchema seguido de preenchimento. Por exemplo:
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
daAuthors.Fill(dsPubs,"Authors");
se utilizar apenas o preenchimento, pode apenas carregar metadados básicos que é necessário para descrever o tipo de nomes e dados de coluna. O método de preenchimento não carrega informações da chave primárias. Para alterar este comportamento predefinido, pode definir a propriedade MissingSchemaAction do objecto ' DataAdapter ' para MissingSchemaAction.AddWithKey, que carrega os metadados de chave primário juntamente com as informações predefinidas. Por exemplo:
daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey;
daAuthors.Fill(dsPubs,"Authors");
- Os dados estão agora disponíveis como um objecto individual do DataTable contido na colecção de tabelas do DataSet. Se tiver especificado um nome de tabela em chamadas FillSchema e preenchimento, pode utilizar esse nome para aceder à tabela específica que pretende.
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];
- Pode utilizar um para cada ciclo para ciclo através de todos os objectos de DataRow contido na colecção de linhas de uma DataTable. Isto permite-lhe aceder a cada linha da tabela. Pode aceder a colunas por nome ou índice posicional (por '0' a ser a primeira posição da coluna). Por exemplo:
foreach (DataRow drCurrent in tblAuthors.Rows)
{
Console.WriteLine("{0} {1}",
drCurrent["au_fname"].ToString(),
drCurrent["au_lname"].ToString());
}
Console.ReadLine();
- Guarde o projecto. No menu de depuração, clique em Iniciar para executar o projecto e certifique-se de que funciona.
Concluir lista de código
using System;
using System.Data;
using System.Data.SqlClient;
namespace PopulateDataSet
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
string sConnectionString;
sConnectionString = "Password=myPassword;User ID=myUserID;"
+ "Initial Catalog=pubs;"
+ "Data Source=(local)";
SqlConnection objConn
= new SqlConnection(sConnectionString);
objConn.Open();
SqlDataAdapter daAuthors
= new SqlDataAdapter("Select * From Authors", objConn);
DataSet dsPubs = new DataSet("Pubs");
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
daAuthors.Fill(dsPubs,"Authors");
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];
foreach (DataRow drCurrent in tblAuthors.Rows)
{
Console.WriteLine("{0} {1}",
drCurrent["au_fname"].ToString(),
drCurrent["au_lname"].ToString());
}
Console.ReadLine();
}
}
}
Para mais informações sobre o ADO.NET, objectos
DataSet e SQL, consulte os seguintes Web sites da Microsoft: