none
Pegar o nome do campo ou (coluna) de uma tabela RRS feed

  • Pergunta

  • using (DataLinqDataContext db = new DataLinqDataContext())

    cad_Fornecedore newReg = new Cad_Fornecedore();
    newReg["NomedoCampo"] = tx_RazaoSocial.Text;
    dbo.Cad_Fornecedores.InsertOnSubmit(newReg);
    dbo.SubmitChanges()

    a dificuldade esta em como fazer isso
    NewReg[lb_NomedoCampo.Text] = tx_RazaoSocial.Text; // onde não sei que nome do campo sera informado ai ele vira por exemplo textbox, combo ou como ai acima label


     desde ja agradeço

    segunda-feira, 1 de março de 2010 09:49

Respostas

  • Esse codigo ficou meio macarronico. tenta assim:

                    var nomeCampo = label1.Text;
                    var campo = newReg.GetType().GetProperty(nomeCampo);
                    if (campo != null)
                        campo.SetValue(newReg, campo, null);
    
                    db.Cad_Fornecedores.InsertOnSubmit(newReg);
                    db.SubmitChanges();                
    


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    terça-feira, 2 de março de 2010 02:27

Todas as Respostas

  • Prezado,

    Não entendi sua dúvida... O que você não está conseguindo fazer?
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    segunda-feira, 1 de março de 2010 12:07
    Moderador
  • Ai And blzz?

    É o seguinte o natural é NewReg.NomeCampo = text1.text; //OK?

    Fazemos isso quando o nome do campo é conhecido mas vamos dizer que eu tenha um parametro no meu sistema que cada cliente usa um form diferente e que usa os mesmos campos da tabela assim eu tereia uns 5 forms que usam a mesma tabela q populam campos diferentes para que eu não precise testar quem esta usando e fazer um tratamento padrão pego o nome do campo na propriedade Text de um Label mas poderia ser na Tag ou de uma variavel enfim no projeto em Visual Basic 6.0 (Seis) eu faço assim:

    Neste caso para recuperar dados
        Set TabClone = New ADODB.Recordset
        Set TabClone.ActiveConnection = Banco
        TabClone.CursorType = adOpenStatic
        TabClone.LockType = adLockOptimistic
        TabClone.Open sSQL
        Text2.Text = TabClone(Text1.Text)'Onde o nome do campo esta em Text1.Text

    Para fazer o insert
    sSQL = "Insert Into Tabela(" & Label1.Caption & "," &  Label2.Caption & ") Value ('" & Text1.Text & "',' " & Text2.Text & "')"

    Veja que os nome do campo esta no Caption dos Label's isso é possivel em VB6 sera que conseguiriamos fazer o mesmo em C#?
    Eu acredito ser possivel mas parece ser dificil.

    abs




    segunda-feira, 1 de março de 2010 12:25
  • Clodoaldo, eu te respondi isso na outra thread.

    De que tipo é seu cad_Fornecedore ?

    Vc so vai acessar a propriedade do seu tipo por lista e por conseguinte pelo nome do campo variavel, se sua classe dispor e implementar isso.
    Se nao, voce vai ter que fazer por reflection.

    Responda primeiro de que tipo é esse seu objeto. Assim podemos ver como acessar as suas colunas de maneira variavel.
    Abs

    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    segunda-feira, 1 de março de 2010 13:26
  • Pois é na outra fiz a perggunta de maneira errada acho q nao estou conseguindo me expressar corretamente
    using (DataLinqDataContext db = new DataLinqDataContext())

    cad_Fornecedore newReg = new Cad_Fornecedore();// Aqui vem do Linq eu puxei uma tabela do sql server DataLinqDataContext
    newReg["NomedoCampo"] = tx_RazaoSocial.Text;
    dbo.Cad_Fornecedores.InsertOnSubmit(newReg);
    dbo.SubmitChanges()

    a dificuldade esta em como fazer isso
    NewReg[lb_NomedoCampo.Text] = tx_RazaoSocial.Text; // onde não sei que nome do campo sera informado ai ele vira por exemplo textbox, combo ou como ai acima label


    Veja se eu consegui me expressar melhor ? 
     cad_Fornecedore newReg = new Cad_Fornecedore();// Aqui vem do Linq eu puxei uma tabela do sql server DataLinqDataContext

    segunda-feira, 1 de março de 2010 16:29
  • Eu entendi sua intencao, mas ainda nao sei que tipo é seu cad_Fornecedore.

    Voce disse que puxou uma tabela do datacontext, mas veja na heranca que tipo de objeto é esse. Eu nao entendo bem o que vc diz quando fala que puxou do datacontext, mas importante pra mim é saber qual a heranca desse objeto.
    Assim poso te falar se da ou nao pra fazer direto ou se vc faz por reflection

    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    segunda-feira, 1 de março de 2010 20:45
  • Gustavo,

    Pelo jeito, ele está utilizando LINQ to Sql Classes... Não sei se daria pra utilizar reflection pra acessar dinamicamente a propriedade... Eu nunca tentei...

    De qualquer forma, Clodoaldo, dê uma olhada neste link e veja se te ajuda:

    http://articles.techrepublic.com.com/5100-10878_11-6099345.html
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    segunda-feira, 1 de março de 2010 22:18
    Moderador
  •            Ai vc me deu uma luz valeu:  mas to pecando em alguma coisa ...
                using (DataLinqDataContext db = new DataLinqDataContext())
                {
                    Cad_Fornecedore newReg = new Cad_Fornecedore();
                   
                    string sCampo;
                    var getCampo = Label1.GetType().GetProperty("Text");
                    sCampo = getCampo.GetValue(Label1, null).ToString();
                    Type myType = newReg.GetType();
                    var oCampo = myType.GetField(sCampo);
                    oCampo.SetValue(newReg, "teee");
                    db.Cad_Fornecedores.InsertOnSubmit(newReg);
                    db.SubmitChanges();

                }

    oCampo.SetValue(newReg, "teee");// no "teee" ai na verdade vai ser de TextBox1.Text

    System.NullReferenceException was unhandled
      Message="Object reference not set to an instance of an object."

    Obrigado por enquanto

    terça-feira, 2 de março de 2010 00:08
  • Andre,

    por reflection obrigatoriamente ele vai conseguir, mas nao é performaticamente o melhor. O ideal é acessar por enumerador.

    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    terça-feira, 2 de março de 2010 02:23
  • Esse codigo ficou meio macarronico. tenta assim:

                    var nomeCampo = label1.Text;
                    var campo = newReg.GetType().GetProperty(nomeCampo);
                    if (campo != null)
                        campo.SetValue(newReg, campo, null);
    
                    db.Cad_Fornecedores.InsertOnSubmit(newReg);
                    db.SubmitChanges();                
    


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    terça-feira, 2 de março de 2010 02:27
  • Acredito que o caminho é por ai mesmo mas naum deu certo, retorna o mesmo erro ja citado.
    terça-feira, 2 de março de 2010 16:34
  • Bota um breakpoint, debuga e ve quem é que esta nulo. em qmomento da erro  
    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    terça-feira, 2 de março de 2010 18:57
  • Agora naum posso abrir o Vs2008 é q no trabalho com vb6, e to meio apurado aqui

    ja chego em casa te retornando
    terça-feira, 2 de março de 2010 19:40
  • Clodoaldo,

    Alguma novidade?
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sábado, 6 de março de 2010 19:12
    Moderador
  • Daê Piá!!!!!!!!!!

     é o seguinte hj finalmente consegui mas  esbarrei em outro problema

    Segue ai como q fica

     

    var providerField = typeof(Cad_Fornecedore).GetProperty(sCampo);
    providerField.SetValue(newReg, sValor,
    null);


    Mas no meu caso naum sei qual o nome da tabela tentei o mesmo mas nao fumego
    Cad_Fornecedore NomeTabela = new Cad_Fornecedore ();
    var getTabela = typeof(NomeTabela).GetProperty("CadFornecedor");

    Retorna esse erro:
    The type or namespace name 'NomeTabela' could not be found (are you missing a using directive or an assembly reference?

    Tem alguma ideia???

    Obrigado por retornar...

    sábado, 6 de março de 2010 23:12
  • Clodoaldo, voce precisa nos ajudar a te ajudar. Tem que explicar melhor.

    Primeiro voce queria pegar o valor de um campo em uma tabela sendo que o nome desse campo voce so saberia em runtime. Blz?
    Afinal, essa parte funcionou?

    Agora vc quer pegar o nome da tabela. É isso mesmo? Nao ta dando pra entender, cara.

    Cad_Fornecedore NomeTabela = new Cad_Fornecedore ();
    var getTabela = typeof(NomeTabela).GetProperty("CadFornecedor");

    qual a finalidade desse codigo? nao tem como vc dar um typeof(NomeTabela). Nome tabela é uma variavel, nao é um tipo.


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    sábado, 6 de março de 2010 23:16
  • Clodoaldo,

    Como o Gustavo falou, tem como você detalhar melhor o que você está querendo?
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sábado, 13 de março de 2010 20:42
    Moderador