none
PrimaryKey DataTable RRS feed

  • Pergunta

  • Olá Senhores..

    á pesquisei antes de postar esta dúvida , porém não me atenderam .Eu quero usar o método FIND do DataRow ,e para isso preciso definir um primaryKey na DataTable. Essa DataTable é alimentada direto por um retorno do Banco, tendo portanto o nome das colunas iguais as do Banco,

    ex: Coluna CODPRODUTO

    TENTEI :

      dt.PrimaryKey = new DataColumn() {dt.Columns["CODPRODUTO"]};

    erro:

    Cannot initialize type 'System.Data.DataColumn' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

    NO PRÓPRIO POST SUGERIDO PELO FORUM , EXISTE UM EXEMPLO:

    private void SetPrimaryKeys()
    {
        // Create a new DataTable and set two DataColumn objects as primary keys.
        DataTable table = new DataTable();
        DataColumn[] keys = new DataColumn[1];
        DataColumn column;
    
        // Create column 1.
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName= "FirstName";
    
        // Add the column to the DataTable.Columns collection.
        table.Columns.Add(column);
    
        // Add the column to the array.
        keys[0] = column;
    
        // Create column 2 and add it to the array.
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = "LastName";
        table.Columns.Add(column);
    
        // Add the column to the array.
        keys[1] = column;
    
        // Set the PrimaryKeys property to the array.
        table.PrimaryKey = keys;
    }

     Desta Forma eu teria que formatar a DataTable , com tipo e nomes de coluna.Mas eu não preciso disso , eu apenas recebo direto do banco.Será que deu para entender ??

    Obrigado.


     

    quarta-feira, 17 de outubro de 2012 14:13

Respostas

  • Eduardo o erro esta na hora que você vai atribuir os DataColumns para a propriedade PrimaryKey. A mesma só aceita um array de DataColumn e você esta passando uma instancia da classe DataColumn, veja este exemplo usando a base Northwind, testei e funcionou:

    using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Northwind_NEW;Integrated Security=True")) //SUA STRING DE CONEXAO PARA BASE NORTHWIND
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", con))
    {
        SqlDataAdapter da = new SqlDataAdapter(cmd);
    
        DataTable dt = new DataTable();
        da.Fill(dt);
    
        //ERRADO
        //dt.PrimaryKey = new DataColumn() { dt.Columns["EmployeeID"] };
        //Cannot initialize type 'System.Data.DataColumn' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
    
        //CORRETO
        dt.PrimaryKey = new DataColumn[] { dt.Columns["EmployeeID"] };
                    
        DataRow result = dt.Rows.Find(1);
    }


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Sugerido como Resposta Vitor Mendes quinta-feira, 18 de outubro de 2012 12:21
    • Marcado como Resposta Eduardo Eiji quinta-feira, 18 de outubro de 2012 17:31
    quarta-feira, 17 de outubro de 2012 18:41