none
duvida em rotina para executar stored procedure. RRS feed

  • Pergunta

  • ola pessoal, na rotina abaixo, estou tentando executar uma stored procedure para popular uma dataGridView, não está dando erro de compilação, só da erro na hora da execução, gostaria de saber o que há de errado na rotina abaixo.

    DataSet dts = new DataSet();
    MySql.Data.MySqlClient.MySqlDataAdapter datap = new MySqlDataAdapter("seleccli", Program.conn);
    datap.SelectCommand.CommandType = CommandType.StoredProcedure;
    datap.Fill(dts, "Contatos"); --> esse comando não esta executando
    dataGridView1.DataSource = dts.Tables["Contatos"];

    Visual Studio 2010, windowsForm, MySQL, C#

    obrigado.

    sexta-feira, 1 de maio de 2015 19:25

Respostas

  • tenta isso:

    DELIMITER $$
    DROP PROCEDURE IF EXISTS 'seleccli' $$ 
    
    CREATE PROCEDURE 'seleccli' (in pcodven int)
    
    BEGIN 
    
        SELECT CODVEN, NOMECLI FROM CONTATOS WHERE CODVEN = pcodven;
        
    END $$
    DELIMITER ;

    segunda-feira, 4 de maio de 2015 17:18
  • Entendi.

    Como faz tempo que não trabalho com o mysql, não lembro muito bem a sintaxe correta pro que você quer. O seu código C# está correto. Você precisa apenas ajustar a procedure no banco mesmo.

    segunda-feira, 4 de maio de 2015 18:50

Todas as Respostas

  • Qual é a exceção gerada?
    sexta-feira, 1 de maio de 2015 22:48
  • olá Alexandre, a exceção gerada é:

    Procedure or function 'seleccli' cannot be found in database agenda.

    Pelo Workbench seleccli, foi criada, ela está em agenda - Routines, é a primeira vez que uso stored Procedure, não sei onde estou errando, copiei essa rotina como exemplo e estou tentando usar.

    Visual Studio 2010, windowsForm, MySQL, C#

    obrigado.

    sábado, 2 de maio de 2015 12:27
  • Porter, você precisa ver qual banco de dados você está usando na sua aplicação. Pois nesse caso, aparentemente, você pode estar acessando um banco de dados diferente de onde a procedure está.
    segunda-feira, 4 de maio de 2015 12:00
  • olá Alexandre, bom dia, acho que agora deu uma clareada a mensagem de erro agora é outra: Parameter 'pcodven' not found in the collection, pela mensagem, entendo que estou deixando de passar o parametro pcodven, você sabe como é passado esse parâmetro ?

    Visual Studio 2010, windowsform, MySQL, C#

    obrigado.

    segunda-feira, 4 de maio de 2015 12:32
  • Segue um exemplo:

    DataSet dts = new DataSet();MySqlConnection conn = new MySqlConnection(connString);
    conn.Open();
    MySqlCommand comm = conn.CreateCommand();
    comm.CommandText = "seleccli";
    comm.Parameters.AddWithValue("@pcodven", "VALOR");
    MySqlDataAdapter datap = new MySqlDataAdapter(comm);datap.Fill(dts);

    segunda-feira, 4 de maio de 2015 13:23
  • estou tentando executar a rotina que você passou, o que é o connString ?

    DataSet dts = new DataSet();MySqlConnection conn = new MySqlConnection(connString);

    segunda-feira, 4 de maio de 2015 15:58
  • É a sua string de conexão com o banco de dados.
    segunda-feira, 4 de maio de 2015 16:02
  • nessa linha, datap.Fill(dts); , está ocorrendo a seguinte exceção:

    You have an error in your sql syntax check the manual that corresponds to your mysql server version for the right syntax to use near seleccli at line 1.

    a stored procedure parece estar certa.

    DELIMITER $$
    DROP PROCEDURE IF EXISTS seleccli $$ 

    CREATE PROCEDURE seleccli(in pcodven int)

    main: BEGIN 

        SELECT CODVEN, NOMECLI FROM CONTATOS WHERE CODVEN = pcodven;
        
    END $$
    DELIMITER ;

    segunda-feira, 4 de maio de 2015 17:03
  • tenta isso:

    DELIMITER $$
    DROP PROCEDURE IF EXISTS 'seleccli' $$ 
    
    CREATE PROCEDURE 'seleccli' (in pcodven int)
    
    BEGIN 
    
        SELECT CODVEN, NOMECLI FROM CONTATOS WHERE CODVEN = pcodven;
        
    END $$
    DELIMITER ;

    segunda-feira, 4 de maio de 2015 17:18
  • se colocar o seleccli entre aspas simples ou dupla, da erro, da forma descrita abaixo consigo popular o dataGridView normalmente.

    string sql = "select nomecli from contatos where CODVEN = " + frmLogin.codusu ";

    DataSet dts = new DataSet();

    MySql.Data.MySqlClient.MySqlDataAdapter datap = new MySqlDataAdapter(sql, Program.conn);
    datap.Fill(dts, "Contatos");
    dataGridView1.DataSource = dts.Tables["Contatos"]; 

    segunda-feira, 4 de maio de 2015 18:31
  • Então o problema era o main, que estava dando erro.
    segunda-feira, 4 de maio de 2015 18:40
  • mas dessa forma, ele não está usando a stored procedure, entendeu ?
    segunda-feira, 4 de maio de 2015 18:44
  • Entendi.

    Como faz tempo que não trabalho com o mysql, não lembro muito bem a sintaxe correta pro que você quer. O seu código C# está correto. Você precisa apenas ajustar a procedure no banco mesmo.

    segunda-feira, 4 de maio de 2015 18:50
  • beleza Alexandre, muito obrigado por sua atenção, vou continuar tentando, se eu conseguir posto o resultado.

    segunda-feira, 4 de maio de 2015 18:54