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 Agnosticado
      Olá senhores, estou intrigado com uma coisa: tenho o seguinte código:
       
      $pesquisa = "SELECT motivo, CASE WHEN motivo = 'Intensa superposição celular em mais de 75% de esfregaço' THEN 'A' WHEN motivo = 'Sangue em mais de 75% de esfregaço' THEN 'B' WHEN motivo = 'Artefatos de dessecamento mais de 75% de esfregaço' THEN 'C' ELSE 'TESTE' END AS opcao FROM insatisfatorio WHERE exame_id = '1' ORDER BY opcao ASC"; quando o executo diretamente no SGBD (PHPMyAdmin) dá certo e tenho a coluna "opcoes" me mostrando a opção "A" como previsto.
      No entanto, quando acrescento:
      $linha = mysql_query($pesquisa); while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){ echo $pesquisa["opcao"]; echo "<br>"; na página PHP para exibir o resultado, o código só me retorna a string "TESTE".
       
      NÃO SEI MAIS O QUE FAZER PQ PARECE TÁ TUDO OK!
      O QUE DIABOS ACONTECE?
    • By gust.php
      Prezados, boa noite.
       
      Nunca fiz isso e estou dúvidas.
       
      Tenho as tabelas CATEGORIAS e SUBCATEGORIAS. Os cadastros e relacionamentos estão funcionando perfeitamente, tudo ok aqui.
      Tenho também a tabela PRODUTOS.
       
      Digamos que eu tenha produtos que fazem parte de categorias que não tem subcategoria, e tenho produtos que fazem parte de subcategorias de alguma categoria.
       
      Como fazer o relacionamento desses produtos?
       
      Vou relacionar a tabela PRODUTOS com CATEGORIAS e SUBCATEGORIAS ?
      A dúvida surgiu pois um produto pode fazer parte de uma categoria que não tem subcategoria, mas posso ter também produtos que fazem parte de subcategorias de uma categoria.
      E qual a cardinalidade desse relacionamento?
       
      Ja vi gente fazendo o relacionamento só com SUBCATEGORIA, mas e se não existir subcategoria????
       
      produto many to many categoria
      produto many to many subcategoria
       
      produto
      id | produto 
       
      prod_cat
      cat_id | prod_id
       
      categoria
      id | categoria 
       
      subcategoria
      id | categoria 
       
      prod_subcat
      subcat_id | prod_id
       
      Como resolver isso de um forma correta?
    • By danicarla
      Oi gente.. tenho uma tabela de endereços e uso php para fazer dois loops para exibir as cidades e depois os bairros daquela cidade,
      fica algo + ou - assim:
      $a = mysql_query('SELECT nome_cidade FROM tab GROUP BY nome_cidade'); while($b = mysql_fetch_array($b)){ echo $b['nome_cidade'].'<br>'; $c = mysql_query('SELECT nome_bairro FROM tab WHERE nome_cidade='$b[nome_cidade]' GROUP BY nome_bairro'); while($d = mysql_fetch_array($c)){ echo $d['nome_bairro'].'<br>'; } } Alguém sabe se eu consigo fazer isso somente com uma consulta? pra não precisar incluir um loop dentro do outro
    • By Agnosticado
      Olá senhores, estou intrigado com uma coisa: tenho o seguinte código:
      $id_exame = "50296"; $pesquisa = "SELECT motivo, CASE WHEN motivo = 'Intensa superposição celular em mais de 75% de esfregaço' THEN 'A' WHEN motivo = 'Sangue em mais de 75% de esfregaço' THEN 'B' WHEN motivo = 'Artefatos de dessecamento mais de 75% de esfregaço' THEN 'C' ELSE 'TESTE' END AS opcao FROM insatisfatorio WHERE exame_id = '$id_exame' ORDER BY opcao ASC"; $linha = mysql_query($pesquisa); while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){ echo $pesquisa["opcao"]; } Quando executo usando
       
      $linha = mysql_query($pesquisa);
                 while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){
              echo $pesquisa["opcao"];
              echo "<br>";
       
       
      a saída é palavra "TESTE" que o default e não o texto "B" que corresponde a string da chamada do $id_exame = 50296.
       
      O ESQUISITO é que quando executo todo select que está na variável $pesquisa direto no SGBD dá certo e o texto "B" aparece normalmente.
      PQ DIABOS ISSO ACONTECE???
    • By Gemenson Miranda
      Oi pessoal, estou com um problema na minha hospedagem LInux do Godaddy, publiquei meu site, fiz o apontamento correto do banco de dados, mas quando acesso a URL o site me exibe HTTP ERROR 500 exibe realizei a configuração do arquivo .htaccess, alterei as permissões para (755), nada disso resolve... A questão e que sempre que comento as informações de apontamento do banco de dados no arquivo index.php o site carrega normalmente, porem sem conexão com o bando mysql, o que me faz pensar que o erro pode esta relacionado ao banco mysql, porem não consigo visualizar o erro por que a tela fica toda branca e não retorna nada, como resolver esse erro ou ao menos exibir qual erro causa ele?? agradeço!
×

Important Information

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