Jump to content
gilcasaoutlook

[Resolvido] Erro ao retornar um DataTable de uma função que executa uma StoredProcedure em MySQL

Recommended Posts

Senhores.

Gostaria de Executar uma StoredProcedure em MySql
e o resultado retornar em um DataTable.
mas o retorno do DataTable não está dando certo.

Tenho uma conexão com o mysql:

public class Conexao
        private MySqlConnection conexao = null;
        private DataTable dt;
        private MySqlDataAdapter da;
        private MySqlCommandBuilder cb;
        private MySqlDataReader dr;
        private MySqlParameter[] pms;

        string StrConexao = "server=" + ConfigurationManager.AppSettings["server_name"] + ";" +
                                      "dataBase=" + ConfigurationManager.AppSettings["data_base"] + ";" +
                                      "port=" + ConfigurationManager.AppSettings["port_number"] + ";" +
                                      "User Id=root;" +
                                      "password=root";

        // Metodo conectar no banco.
        public MySqlConnection AbrirConexao()
        {
            try
            {
                conexao = new MySqlConnection(StrConexao);
                conexao.Open();
                return conexao;
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }
}

Conexão está funcionando porque utilizo ela em outro recurso.

Tenho uma Stored Procedure em MySql:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_seleciona_pessoa`()
BEGIN
    
    select id, nome from pessoa;
    
END

Tenho uma função que retorna um DataTable:

 public DataTable RetDataTableStoredProc()
{
                MySqlCommand cmd = new MySqlCommand();

                AbrirConexao();

                cmd.Connection = conexao;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = StoredProc;
                dr = cmd.ExecuteReader();

                dt.Load(dr);
                return dt;
}                

O comando dr = cmd.ExecuteReader(); passa sem dar erro
mas quando executo as duas linhas abaixo:
                
                dt.Load(dr);
                return dt;

e não retorna um DataTable.

Conto com vossa ajuda.

Att.

Gilberto Rezende               

Share this post


Link to post
Share on other sites
1 hora atrás, gilcasaoutlook disse:

Senhores.

Gostaria de Executar uma StoredProcedure em MySql
e o resultado retornar em um DataTable.
mas o retorno do DataTable não está dando certo.

Tenho uma conexão com o mysql:

public class Conexao
        private MySqlConnection conexao = null;
        private DataTable dt;
        private MySqlDataAdapter da;
        private MySqlCommandBuilder cb;
        private MySqlDataReader dr;
        private MySqlParameter[] pms;

        string StrConexao = "server=" + ConfigurationManager.AppSettings["server_name"] + ";" +
                                      "dataBase=" + ConfigurationManager.AppSettings["data_base"] + ";" +
                                      "port=" + ConfigurationManager.AppSettings["port_number"] + ";" +
                                      "User Id=root;" +
                                      "password=root";

        // Metodo conectar no banco.
        public MySqlConnection AbrirConexao()
        {
            try
            {
                conexao = new MySqlConnection(StrConexao);
                conexao.Open();
                return conexao;
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }
}

Conexão está funcionando porque utilizo ela em outro recurso.

Tenho uma Stored Procedure em MySql:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_seleciona_pessoa`()
BEGIN
    
    select id, nome from pessoa;
    
END

Tenho uma função que retorna um DataTable:

 public DataTable RetDataTableStoredProc()
{
                MySqlCommand cmd = new MySqlCommand();

                AbrirConexao();

                cmd.Connection = conexao;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = StoredProc;
                dr = cmd.ExecuteReader();

                dt.Load(dr);
                return dt;
}                

O comando dr = cmd.ExecuteReader(); passa sem dar erro
mas quando executo as duas linhas abaixo:
                
                dt.Load(dr);
                return dt;

e não retorna um DataTable.

Conto com vossa ajuda.

Att.

Gilberto Rezende               

 

Pessoal.

Sou grato, já resolvi o problema.

 

           try
            {
                cmd = new MySqlCommand();

                DataSet ds = new DataSet();

                cmd.Connection = conexao;
                cmd.CommandText = StoredProc;
                cmd.CommandType = CommandType.StoredProcedure;
                da = new MySqlDataAdapter(cmd);
                da.Fill(ds, "tabela");
                dt = ds.Tables["tabela"];
                return dt;

            }
            catch (Exception erro)
            {

                throw erro;
            }

att.

 

Gilberto Rezende

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By srs1999_
      Tópico
       
      Site em Código
      Sobre desenvolver sites sem o wordpress que ja tá tudo ali feito que seja um site dinâmico ou seja com banco de dados , APIs de pagamento, Painel para o usuário ,  além de todas  as funções que tem no wordpress e você teria propriedade pra explicar sobre detalhes mais técnicos da produção onde no wordpress só quem entende de progrqmação explicaria algum detalhe técnico 
      Então usando basicamente : 
      FRONT END 
      HTML 
       CSS 
      JAVASCRIPT 
      ALGUMA DE BACKEND COMO PHP E BANCO DE DADOS
      Pode se criar sites/sistemas tão bons ou melhores que no wordpress
       
      Fato : o proprio wordpress é feito em php e ate o proprio facebook tbm em php
      Fato 2 :  cerca de 70% dos sites são feitos em Wordpress
       
      Acho esse lance de procurar o caminho mais fácil limita muito a pessoa por exemplo é facil editar imagens no paint bem intuitivo , agora para editar no photoshop com muitas outras possibilidades  acaba sendo importante ir explorando essa elaboração mais difícil  com um mesmo objetivo. No caso do exemplo ( editar imagens )  
       
      Reflexão:
      Vale a pena se dedicar a trabalhar com a ferramenta Wordpress apenas por ser um meio rápido de ganhar dinheiro ?
      Ou trabalhar sem wordpress  usando tudo que exigido pra criar coisas originais mais que não seria tão rápido a produção. Mas creio que além dos sites feitos também geraria a possibildade de vender o sistema web criado para o cliente personalizar .
       
      Você Desenvolveria de que forma :
       Wordpress apenas ?
       
      Conhecer programação pra trabalhar 
      com  Wordpress ?
       
      Produzir tudo só com programação totalmente dinâmico sem  Wordpress?
    • By Duilio Gomes Pereira
      Tenho um banco de dados com mais de 21 mil usuários do wordpress. Como faço para deletar os usuário no  Phpmyadmin e deixar apenas 2 usuários?
       
      Pois só preciso de 2 usuários neste site.
       
      Obrigado!
    • By Duilio Gomes Pereira
      Olá!
      Tenho um bando de dados com mais de 21 mil usuários do wordpress. Como faço para deletar no Phpmyadmin e deixar apenas 2 usuários?
      Obrigado!
    • By Junior SAIZO
      Estou com uma duvida na qual não obtive solução. Tenho um objeto Array values e um array status, onde eu quero relacionar os índices do objeto Array values aos indices do array status. De modo que eu possa escrever um teste lógico onde: Se o indice 0 do objeto Array values for diferente de null (ou seja, contém valor), então o indice 0 do array status receberá o valor '1'.
      OU 
      Se o indice 1 do objeto Array values for diferente de null (ou seja, contém valor), então o indice 1 do array status receberá o valor 1.
       
      Por exemplo, antes do teste lógico:
      values:[ 0 => [ 0 => "1,02" 1 => "2,032" 2 => "32,01" 3 => "0,021" ] 1 => [ 0 => "null" 1 => "null" 2 => "8,258" 3 => "1,021" ] 2 => [ 0 => "4,021" 1 => "6,258" 2 => "null" 3 => "10" ] ] status:[ 0 => "0" 1 => "0" 2 => "0" ] Após o teste lógico:
       
      status:[   0 => "1"   1 => "0"   2 => "0" ] Neste exemplo só o indice 0 do array status recebeu o valor "1", porque APENAS o array 0 do objeto Array values tinha valores diferente de null.
       
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      O array status sempre terá o mesmo número de índices que o objeto Array values terá de arrays (Se array status tem 5 indices (0, 1, 2, 3, 4), o objeto Array value terá 5 arrays (0, 1, 2, 3, 4)). Além disso o array status sempre iniciará com os valores do indice igual a '0'. E se os valores dos indices do objeto values forem TODOS diferentes de null, cada indice do array status receberá o valor '1'.
       
      Exemplificando:

       
      <?php status:[   0 => "1",   1 => "1",   2 => "1", ] ?>  
       
      Em outro fórum obtive a seguinte resposta:
       
      <?php $aValues = [ 0 => [ 0 => "1,023" , 1 => "0,023" , 2 => "5,023" , 3 => "1" ], 1 => [ 0 => null , 1 => null , 2 => "5" , 3 => "1,87" ], 2 => [ 0 => "null" , 1 => null , 2 => null , 3 => null ] ]; $aStatus = [ 0 => 0 , 1 => 0 , 2 => 0 ]; foreach ($aValues as $chave => $values) { $status = 1; foreach ($values as $value) { // se tiver qquer valor null status recebe 0 if ($value == null) { $status = 0; break; } } $aStatus[$chave] = $status; } echo '<pre>'; print_r($aStatus); ?> Porém, quando eu executo o código NÂO é me retornado o array status com os indices com valores "0" ou "1", me retorna apenas uma nova chave FORA do array status com algum valor "0" ou "1". Tentei modificar o código ou tentar uma abordagem diferente, mas sem resultado. Vou inserir uma imagem para melhor compreensão do que o código me retorna.
       
       
      Espero ter sido claro na minha dúvida.  
      Desde já, agradeço.

    • By Giovanird
      Estou quebrando a cabeça para fazer uma consulta em 2 colunas da mesma tabela.
      Preciso retornar a NOTA1 e NOTA2 consultando ambas colunas e listar sem repetir as notas vinculadas com cada série.

      TABELA ALUNOS
      COD |    CODSERIE  |  DATACADASTRO  |  NOTA1  |  NOTA2  
      1       |    2                  |  01/08/2021           |  5            |  3
      2       |    1                  |  11/08/2021           |  3            |  5
      3       |    2                  |  12/08/2021           |  5            |  3
      4       |    3                  |  15/08/2021           |  3            |  1
      5       |    2                  |  15/08/2021           |  5            |  3
      6       |    3                  |  18/08/2021           |  4            |  5
      7       |   2                   |  22/08/2021           |  2            |  3
      8       |   1                   |  12/08/2021           |  1            |  3
      9       |   2                   |  25/08/2021           |  5            |  6

      RETORNAR:
      SERIE 1
      Nota: 3
      Nota: 5
      Nota: 1
       
      SERIE 2
      Nota: 5
      Nota: 3
      Nota: 2
      Nota: 6
       
      SERIE 3
      Nota: 3
      Nota: 1
      Nota: 4
      Nota: 5
       
      Aqui tenho um foreach de outra tabela que devolve o codigo das séries e as notas para consulta foreach($rsserie as list($varserie,$varnota1,$varnota2)){ SELECT nota1, nota2 FROM alunos WHERE codserie like '$varserie' and (nota1 = '$varnota1' or nota1 = '$varnota2' or nota2 = '$varnota1' or nota2 = '$varnota2') Group by nota1, nota2 }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.