O método DataAdapter.Fill não define todas as propriedades dos objetos DataTable e DataColumn

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 310373
Este artigo se refere ao seguinte namespace Microsoft .NET Framework Class Library:
  • System.Data
Sintomas
Após usar o método DataAdapter.Fill , várias propriedades da DataTable e objetos de DataColumn (como chaves primárias, campos de incremento automático, anuláveis campos, índices exclusivos e assim por diante) não são definidas.
Causa
O objeto de DataAdapter é otimizado para cenários somente-leitura por padrão. O método Fill somente recupera a quantidade de esquema que é necessária para exibir os dados. Você deverá executar etapas adicionais para obter o esquema adicional que são necessárias para atualizar ou validar um objeto.
Resolução
Para obter informações adicionais sobre o objeto DataSet , use um dos seguintes métodos:
  • Chame o método DataAdapter.FillSchema para obter informações de esquema estendido.
  • Defina DataAdapter.MissingSchemaAction como MissingSchemaAction.AddWithKey antes de chamar o método Fill .
Para obter informações adicionais sobre quando usar o método FillSchema e a propriedade MissingSchemaAction , clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
310128Quando usar FillSchema e MissingSchemaAction
Mais Informações

Etapas para reproduzir o comportamento

  1. Inicie o Microsoft Visual Studio NET..
  2. Crie um novo projeto Windows Application no Visual Basic NET.. Form1 é adicionado para o projeto por padrão.
  3. Certifique-se que seu projeto contém uma referência ao namespace System.Data .
  4. Coloque um controle Button e um controle DataGrid no Form1.
  5. Altere a propriedade nome do botão para btnTest e a propriedade Text para teste .
  6. Use a declaração Imports nos namespaces System.Data e sistema para que não é necessário para qualificar declarações esses namespaces posteriormente no seu código. Adicione o seguinte código à seção "General Declarations" do Form1:
    Imports SystemImports System.Data.OleDbImports System.Data.SqlClient					
  7. Adicione o seguinte código na janela código após a região "Windows Form Designer gerou código":
        Private Sub btnTest_Click(ByVal sender As System.Object, _    ByVal e As System.EventArgs) Handles btnTest.Click        Dim myConnString As String = _                "User ID=sa;password=sa;Initial Catalog=Northwind;Data Source=myServer"        Dim ds As New DataSet()        Dim con As New SqlConnection(myConnString)        Dim daCust As New SqlDataAdapter("Select * From Customers", con)        'Uncomment either of the following two lines to obtain additional schema information.        'daCust.MissingSchemaAction = MissingSchemaAction.AddWithKey        'daCust.FillSchema(ds, SchemaType.Source, "Cust")        daCust.Fill(ds, "Cust")        DataGrid1.DataSource = ds        DataGrid1.DataMember = "Cust"        Dim colArr() As DataColumn        colArr = ds.Tables(0).PrimaryKey        If colArr.Length.ToString() = 0 Then            MessageBox.Show("No Primary Key is defined.")        End If        Dim i As Integer        For i = 0 To colArr.GetUpperBound(0)            MessageBox.Show("Primary Key : " & colArr(i).ColumnName)        Next i    End Sub					
  8. Modificar a seqüência de conexão ( myConnString ) conforme apropriado para seu ambiente.
  9. Salve seu projeto. No menu Debug , clique em Iniciar para executar seu projeto.
  10. Clique em Test . Observe que você não pode recuperar informações de chave primária da tabela.
  11. Descomente o código para definir MissingSchemaAction ou usar FillSchema e clique em Testar novamente. Observe que as informações de chaves primárias são recuperadas corretamente.
Referências
Para obter mais informações sobre objetos ADO.NET e a sintaxe, consulte a seguinte documentação do Software Development Kit (SDK) do Microsoft .NET Framework ou a MSDN online:

Propriedades

ID do Artigo: 310373 - Última Revisão: 05/13/2007 05:02:03 - Revisão: 2.7

Microsoft ADO.NET 2.0, Microsoft ADO.NET (included with the .NET Framework), Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic 2005

  • kbmt kbtshoot kbprb kbsqlclient kbsystemdata KB310373 KbMtpt
Comentários