RETORNO DE REGISTRO SELECT GENÉRICO

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

RETORNO DE REGISTRO SELECT GENÉRICO

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 faço 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.. , agradeço 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;
            }
        }

Não importa o que é o mundo...O importante são seus sonhos!Não importa o que você é...O importante é o que você quer ser.
Dúvida Sanada, encerre o tópico 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 Oráculo!
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 trás eu já havia ensaiado um ORM e por falta de tempo desisti.

Atualmente o meu novo sistema tem um "ORM"(que na minha concepção todo tipo de tecnologia que é proprietária, pode-se definir como um novo conceito, e defino essa tecnologia de PrORM) próprio que estou desenvolvendo de acordo com minha necessidade.
O mapeamento se encarrega de todo o transporte de dados entre Formulários, classe e banco de dados.

No seu caso vc precisaria de uma classe/função/método 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(gravação e deleção). Na prática, você tem o banco, um gerador T4 de classes POCO e toda a engine para consulta e gravação. Sugiro que dê uma olhadinha é algo realmente divisor de águas ao invés de criar o próprio ORM. Além disso, o SqlKata tem suporte à vários bancos de dados e suas "mazelas".

_______________________________________________________________________
Virei Oráculo!
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