RETORNO DE REGISTRO SELECT GENRICO

 Tópico anterior Próximo tópico Novo tópico

RETORNO DE REGISTRO SELECT GENRICO

C#

 Compartilhe  Compartilhe  Compartilhe
#487472 - 02/03/2019 18:01:39

XXXANGELSXXX
BELO HORIZONTE
Cadast. em:Setembro/2008


Senhores boa noite, estou iniciando os trabalhos em c# e senti a necessidade de uma rotina para retornar apenas um valor do banco mediante a um criterio especifico.. uma consulta rapida por exemplo.. mas eu fao a funcao com tipo STRING, mas o retorno as vezes pode ser int ou date por exemplo, e se eu tiver no retorno algo que nao foi tipado eu tenho q ue ficar fazendo a conversao do retorno, que algo que quero evitar, eu vi que tem como utilizar os generics para essa tarefa, mas nao estou conseguindo encaixar na minha funcao, abaixo a funcao, se alguem puder dar uma forcinha.. , agradeo muito.

public String RetornaValor(string Tabela, string Criterio, string CampoRetorno, string sTipo = []C[], string sApelido = [][])
        {
            try

            {
                string valret;

                String cSQL_Ler;
                valret = [][];
                cSQL_Ler = []select [] + CampoRetorno + [] from [] + Tabela;
                if (Criterio != [][])
                    cSQL_Ler += [] where [] + Criterio;
                cSQL_Ler += [] limit 1[];

                ConexaoDB conexao = new ConexaoDB();
                using (MySqlDataReader reader = conexao.ExecutaSQL(cSQL_Ler))

                    if (reader.Read())
                    {
                        if (sApelido != [][])
                        {
                            valret = Convert.ToString(reader[sApelido]);
                        }
                        else
                        {
                            valret = Convert.ToString(reader[CampoRetorno]);
                        }
                    }
                //Tratar retorno
                if (valret == [][] || valret == null)
                {
                    if (sTipo == []N[])
                    {
                        valret = []0[];
                    }
                    if (sTipo == []C[] || sTipo == []D[])
                    {
                        valret = [][];
                    }
                }
                return valret;
            }
            //catch (Exception ex)
            catch
            {
                string valret = [][];
                switch (sTipo)
                {
                    case []N[]:
                        valret = []0[];
                        break;
                    case []C[]:
                    case []D[]:
                        valret = [][];
                        break;
                }
                return valret;
            }
        }

No importa o que o mundo...O importante so seus sonhos!No importa o que voc ...O importante o que voc quer ser.
Dvida Sanada, encerre o tpico e pontue quem ajudou!!!


#487475 - 02/03/2019 22:32:53

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

Última edição em 02/03/2019 23:08:16 por KERPLUNK

Use um ORM. Entity framework ou Dapper. Se usar o Dapper considere usar o SqlKata


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#487481 - 03/03/2019 10:39:37

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Lhe recomendo fortemente, abandonar esse tipo de consultas, utilizando-se de sqls completas no codigo.
J que utiliza mysql, utilize os recursos que ele lhe oferece, como por exemplo StoredProcedure, Functions , etc.

A dica do Kerplunk boa, mas nada melhor do que vc mesmo criar seu ORM.
A tempos a trs eu j havia ensaiado um ORM e por falta de tempo desisti.

Atualmente o meu novo sistema tem um []ORM[](que na minha concepo todo tipo de tecnologia que proprietria, pode-se definir como um novo conceito, e defino essa tecnologia de PrORM) prprio que estou desenvolvendo de acordo com minha necessidade.
O mapeamento se encarrega de todo o transporte de dados entre Formulrios, classe e banco de dados.

No seu caso vc precisaria de uma classe/funo/mtodo para fazer o tratamento de tipos de dados do retorno e poderia ser chamado da seguinte maneira :

using (MySqlDataReader reader = conexao.ExecutaSQL(cSQL_Ler))

                    if (reader.Read())
                    {
                       return suafuncao(reader[CampoRetorno]);
                    }
            }

Em suafuncao(reader[CampoRetorno]) vc trataria o retorno...


Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#487492 - 03/03/2019 16:59:45

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
FOXMAN, JUSTAMENTE ISSO que o Dapper faz, ele encarrega do mapeamento das tabelas e colunas. Se voc usar um gerador para suas classes POCO(como o PetaPoco, por exemplo), nem isso voc vai precisar escrever. Simplesmente gera seu banco de dados, o PetaPoco cria as classes referentes cada tabela, o SqlKata faz queries de modo fluente e o Dapper(ou SqlKata mesmo) faz as partes de CRUD(gravao e deleo). Na prtica, voc tem o banco, um gerador T4 de classes POCO e toda a engine para consulta e gravao. Sugiro que d uma olhadinha algo realmente divisor de guas ao invs de criar o prprio ORM. Alm disso, o SqlKata tem suporte vrios bancos de dados e suas []mazelas[].

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por XXXANGELSXXX em 30/10/2019 17:11:01