Usuário com melhor resposta
duvida em rotina para executar stored procedure.

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.
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 ;
- Marcado como Resposta Eduardo.RomeroModerator segunda-feira, 4 de maio de 2015 20:59
-
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.
- Marcado como Resposta Eduardo.RomeroModerator segunda-feira, 4 de maio de 2015 20:59
Todas as Respostas
-
-
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.
-
-
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.
-
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);- Sugerido como Resposta alexandre_cavaleiro segunda-feira, 4 de maio de 2015 18:40
-
-
-
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 ;
-
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 ;
- Marcado como Resposta Eduardo.RomeroModerator segunda-feira, 4 de maio de 2015 20:59
-
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"]; -
-
-
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.
- Marcado como Resposta Eduardo.RomeroModerator segunda-feira, 4 de maio de 2015 20:59
-