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 ricardonews
      olá pessoal, alguém ja teve dificuldade de logar no banco com um formulario de login feito pelo ajax quando a senha é criptografada?
      a minha está o sendo pelo md5 e quando deixo sem criptografia eu logo no banco.  Eu gostaria de logar com criptografia.
      vou deixar  a index e o arquivo que busca no banco de dados
      <!doctype html> <html> <?php require_once"config.php"; ?> <head> <title>Formulario de login</title> <style type="text/css"> html{ height:100%; background: linear-gradient(rgba(38, 128, 101, 0.9), rgba(52, 177, 140, 0.9)); } #div_login{ width:500px; margin:40px auto; position:relative; background-color: #ffffff; padding: 20px; border-radius: 5px; } #message{ width:100%; text-align:center; color:red; margin-bottom: 20px; } #div_login h1 { text-align: center; } #div_login input, #div_login textarea,#div_login a{ padding:10px; border:1px solid rgba(38, 128, 101, 0.9); border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; outline:none; box-sizing: border-box; width:100%; font:14px "Trebuchet MS", tahoma, arial; color:#090; margin-bottom:10px; } #div_login #but_submit,#div_login a { background-color: #27ae60; font-weight: bold; text-transform: uppercase; color: #ffffff; width: auto; margin: 0; padding: 10px 20px; } </style> <!--<link href="style.css" rel="stylesheet" type="text/css">--> <script src="jquery-3.2.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ $("#but_submit").click(function(){ var username = $("#meu_nome").val().trim(); var password = $("#minha_senha").val().trim(); if( username != "" && password != "" ){ $.ajax({ url:'pesquisar.php', type:'post', data:{username:username,password:password}, success:function(response){ var msg = ""; if(response == 1){ window.location = "home.php"; }else{ msg = "email e senhas invalidos!"; } $("#message").html(msg); } }); } }); }); </script> </head> <body> <div class="container"> <div id="div_login"> <h1>Login</h1> <div id="message"></div> <div> <input type="text" class="textbox" id="meu_nome" name="meu_nome" placeholder="email" /> </div> <div> <input type="password" class="textbox" id="minha_senha" name="minha_senha" placeholder="senhas"/> </div> <div> <input type="button" value="logar" name="but_submit" id="but_submit" /> <a href="inicio.php"><strong>Cadastrar</strong></a> </div> </div> </div> </body> </html> agora vem oque busca os dados no banco e é justamente essa parte que eu não entendo oque acontece.
      <?php require_once "config.php"; // AQUI É O PESQUISAR PHP $uname = mysqli_real_escape_string($con,$_POST['username']); $password = mysqli_real_escape_string($con,$_POST['password']); if ($uname != "" && $password != ""){ $sql_query = "SELECT count(*) as cntUser FROM usuarios WHERE email='".$uname."' and password='".$password."'"; $result = mysqli_query($con,$sql_query); $row = mysqli_fetch_array($result); $count = $row['cntUser']; if($count > 0){ $_SESSION['uname'] = $uname; echo 1; }else{ echo 0; } } desde já fico agradeço 
    • By henricv
      Bom dia.
       
      Estou iniciando na área de desenvolvimento de testes automatizados em Ruby+Cucumber+Capybara.
      Atualmente, estou com o projeto de automação com informações chumbadas no código, porém gostaria de realizar consultas no banco de dados da empresa, para aumentar o nível de minha aplicação.
       
      O problema é que não estou conseguindo achar algum tutorial, ou script como em outras linguagens, que realize esta conexão com o banco de dados. Não utilizo Rails em minha aplicação.
       
      Tentei utilizar o comando em minha aplicação, seguindo um tutorial que estava mais organizado, porém não consegui realizar a conexão correta.
      gem install mysql2  
      Poderiam me ajudar?
    • By MateusOFCZ
      Olá, estou desenvolvendo um projeto de registro de clientes em java no netbeans e usando o MySQL Workbench e Xampp, gostaria de saber se é possível fazer com que o programa fique verificando se está conectado com o banco de dados, e caso não esteja ele mostra uma mensagem pedindo para o usuário se conectar em uma rede, caso ele se conecte o programa irá esconder essa mensagem e funcionará normalmente.

      Eu consegui fazer com que ele mostre se está conectado ou não, porém se eu desligar o servidor ele não atualiza mostrando que está offline, ele continua como online...
    • By wesleycsilva
      Tem uma tabela que relaciona os produtos de uma determinada compra, onde preciso consultar diversos produtos e retornar os ids das compras que tenham todos os produtos que consultei, em uma estrutura parecida com o exemplo abaixo:
       
      SELECT  * FROM  produtos_has_compras WHERE (idProduto = 6 AND idProduto = 77 AND idProduto = 11) GROUP BY idCompra;
       
      Alguém teria uma solução que possa me ajudar?
    • By bradry
      Olá galera !
       
      Tenho uma dúvida referente aos operadores de pesquisa. Tenho uma  tabela com a seguinte estrutura
       
      id integer, CPF varchar ( 20 ), SCORE_CUSTOM varchar ( 20 ),  SCORE varchar ( 20 ), SCORE_CCOG varchar ( 20 ), RESTRITIVO varchar ( 20 ) );
       
      Quando faço uma pesquisa da maneira a baixo colocando aspas simples no ZERO retorna erro, agora quando faço a mesma pesquisa sem aspas me retorna o resultado esperado.
       
      select * from score
      where RESTRITIVO ='0' 
      and SCORE_CUSTOM >=100
      and SCORE_CUSTOM <=200;
       
      Só queria entender se esse funcionamento de aspas vale para tudo que vou pesquisa ou se tem que ser usado em casos específicos. Não consegui encontrar nada sobre na web.
×

Important Information

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