-
Explicação detalhada de C# DataSet e DataTable
2009-quinta-feira-21
1. Crie um objeto DataSet:
DataSet ds = new DataSet("NomeDataSet");
2. Visualize a estrutura criada chamando SqlDataAdapter.Fill
da.Fill(ds,"Pedidos");
DataTable tbl = ds.Table[zero];
foreach(DataColumn col em tbl.Columns)
Console.WriteLine(col.NomeColuna);
3. Visualize os dados retornados por SqlDataAdapter ①, objeto DataRow
DataTable tbl = ds.Table[zero];
Linha DataRow = tbl.Row[zero];
Console.WriteLine(ros["OrderID"]);
② Verifique os dados armazenados no DataRow.
DataTable tbl = linha.Tabela;
foreach(DataColumn col em tbl.Columns)
Console.WriteLine(linha[col]);
③ Verifique o objeto DataRow em DatTable.
foreach (linha DataRow em tbl.Rows)
DisplayRow(linha);
4. Verifique os dados no DataSet ① Verifique as propriedades do DataColumn: ReadOnly, AllowDBNull, MaxLength, Unique
② Restringe a agregação de objetos DataTable: UiqueConstraints, Primarykey, ForeignkeyConstraints
Normalmente não há necessidade de se preocupar em criar ForeignkeyConstraints, porque um é criado quando um relacionamento é criado entre dois objetos DataTable em um DataSet.
③ Use o método SqlDataAdapter.Fill para recuperar informações do método.
5. Compilar código para criar objetos DataTable
①. Crie um objeto DataTable: DataTable tbl = new DataTable("TableName");
② Adicione o DataTable à convergência da tabela do objeto DataSet.
DataSet ds = new DataSet();
DataTable tbl = new DataTable("Clientes");
ds.Tables.Add(tbl);
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Clientes");
Os objetos DataTable só podem existir em no máximo um objeto DataSet. Se desejar adicionar um DataTable a vários DataSets, você deverá usar a etapa Copiar ou Clonar. A etapa Copiar cria um novo DataTable que possui a mesma estrutura do DataTable original e contém linhas semelhantes; a etapa Clone cria um novo DataTable que possui a mesma estrutura do DataTable original, mas não contém nenhuma linha.
③ Adicione colunas ao DataTable
DataTable tbl = ds.Tables.Add("Pedidos");
DataColumn col =tbl.Columns.Add("OrderID",typeof(int));
col.AllowDBNull = falso;
col.MaxLength = cinco;
col.Único = verdadeiro;
tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};
Quando uma chave primária deve ser definida, AllowDBNull é automaticamente definido como False;
④. Descarte colunas de incremento automático
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Pedidos");
DataColumn col = tbl.Columns.Add("OrderID",typeof(int));
col.AutoIncrement = true;
col.AutoIncrementSeed = -1;
col.AutoIncrementStep = -1;
col.ReadOnly = true;
⑤. Adicione colunas com base em expressões
tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantidade*PreçoUnitário");
6. Modifique o conteúdo do DataTable ①, adicione novo DataRow
Linha DataRow = ds.Tables["Clientes"].NewRow();
linha["CustomerID"] = "ALFKI";
ds.Tables["Clientes"].Rows.Add(linha);
objeto[] aValues ={"ALFKI","Alfreds","Anders","030-22222"};
da.Tables["Clientes"].LoadDataRow(aValues,false);
② A correção está em andamento.
Modificar o conteúdo de uma linha não modifica automaticamente o conteúdo correspondente no banco de dados. As modificações na linha são consideradas alterações pendentes que serão posteriormente entregues ao banco de dados usando o objeto SqlDataAdapter.
DataRow linhaCliente;
rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
if(linhaCliente == null)
//Não procura clientes
outro
{
rowCustomer["NomedaEmpresa"] = "NovoNomeEmpresa";
rowCustomer["NomeContato"] = "NovoNomeContato";
}
//Recomendado usar este formulário
DataRow linhaCliente;
rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
if(linhaCliente == null)
//Não procura clientes
outro
{
rowCustomer.BeginEdit();
rowCustomer["NomedaEmpresa"] = "NovoNomeEmpresa";
rowCustomer["NomeContato"] = "NovoNomeContato";
rowCustomer.EndEdit();
}
//null significa não modificar os dados nesta coluna
obejct[] aCustomer ={null, "NewCompanyName", "NewContactName", null}
DataRow linhaCliente;
rowCustomer = ds.Tables["Clientes"].Rows.Find("ALFKI");
rowCustomer.ItemArray = aCustomer;
③ Lidar com o valor nulo de DataRow
//Verifica se está vazio
DataRow linhaCliente;
rowCustomer = ds.Tables["Clientes"].Rows.Find("ALFKI");
if(rowCustomer.IsNull("Telefone"))
Console.WriteLine("É Nulo");
outro
Console.WriteLine("Não é nulo");
//Concede valor nulo
rowCustomer["Telefone"] = DBNull.Value;
④. Eliminar DataRow
DataRow linhaCliente;
rowCustomer = ds.Tables["Clientes"].Rows.Find("ALFKI");
rowCustomer.Delete();
⑤. Eliminar DataRow
DataRow rowCustomer = ds.Tables["Clientes"].Rows.Find("ALFKI");
rowCustomer.ItemArray = aCustomer;
da.Tables["Clientes"].Remove(rowCustomer);
talvez
ds.Tables["Clientes"].RemoveAt(intIndex);
⑥ Use as propriedades DataRow.RowState: Inalterado, Desanexado, Adicionado, Modificado, Excluído.
privado vazio DemonstrateRowState()
{ // Executa uma função para criar uma DataTable com uma coluna. DataTable myTable = MakeTable();
// Cria um novo DataRow. myRow = myTable.NewRow(); // Linha desanexada.
myTable.Rows.Add(myRow); // Nova linha. Console.WriteLine("AddRow " + myRow.RowState);
myTable.AcceptChanges(); // Linha inalterada. Console.WriteLine("AcceptChanges " + myRow.RowState);
myRow["FirstName"] = "Scott"; // Linha modificada. Console.WriteLine("Modificado " + myRow.RowState);
myRow.Delete(); // Linha excluída. Console.WriteLine("Excluída " + myRow.RowState }
⑦ Verifique as alterações pendentes no DataRow.
DataRow linhaCliente;
rowCustomer = ds.Tables["Clientes"].Rows.Find("ALFKI");
rowCustomer["NomedaEmpresa"] = "NovoNomeEmpresa";
string strNomeDaEmpresa, strNomeDaEmpresa;
Console.WriteLine(rowCustomer["NomedaEmpresa", DataRowVersion.Current]);
Console.WriteLine(rowCustomer["NomedaEmpresa", DataRowVersion.Original]);
1. Conjunto de dados
①、Atributos
CaseSensitive: usado para controlar se as comparações de strings no DataTable diferenciam maiúsculas de minúsculas.
PRINCIPAL
Fonte deste artigo:
Minha rede anormal
JavaException
DotnetException
Oráculo