Array
(
)

Não consigo editar registro do MySql usando C-sharp e asp.net

Wolfalone
   - 27 jan 2014

Quando edito um registro, não há mensagem de erro, porem nada é alterado no banco de dados. Estou usando um web form com um botão salvar ( ver código abaixo:) Agradeço qualquer ajuda. Já verifiquei que diretamente no MySql, a procedure funciona, Mas utilizando asp.net,os campos não saõ alterados, . Ou seja, dentro do asp.net não funciona. No entanto não ocorre um erro também. Isso é o pior, pois não sei o que esta ocorrendo. Alguem já passou por esse tipo de erro e pode me ajudar?
protected void btnSalvar_Click(object sender, EventArgs e)
{
String sql = "SERVER = localhost; DATABASE = ddssitepessoal; UID=wolfalone; PASSWORD = ''752168''";
try
{
con = new MySqlConnection(sql);
MySqlCommand cmd = new MySqlCommand("altera_perfil",con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("nmlogin", txtNome_Login.Text);
cmd.Parameters.AddWithValue("senh", txtSenha.Text);
cmd.Parameters.AddWithValue("nmreal", txtNome_Real.Text);
cmd.Parameters.AddWithValue("mail", txtEmail.Text);
cmd.Parameters.AddWithValue("curs", txtCurso.Text);
cmd.Parameters.AddWithValue("esco", txtEscola.Text);
cmd.Parameters.AddWithValue("disc", txtDisciplina.Text);
cmd.Parameters.AddWithValue("modu", txtModulo.Text);
cmd.Parameters.AddWithValue("peri", txtPeriodo.Text);
cmd.Parameters.AddWithValue("moti", txtMotivo.Text);
cmd.Parameters.AddWithValue("ID", Convert.ToInt32(txtAluno_ID.Text));
cmd.Connection = con;
con.Open();
cmd.Prepare();
cmd.ExecuteNonQuery();
cmd.Dispose();
lblMensagem.Text = "Registro atualizado com sucesso";
}
catch (Exception ex)
{
lblMensagem.Text = string.Format("Erro : {0}", "Houve um erro inexperado!" + ex.Message);
}
finally
{
con.Close();
con.Dispose();
}
}

Chiodini
   - 28 jan 2014

Bom dia,

Você poderia colocar a procedure para gente dar uma olhada,
o fato dela executar certo no banco, pode ser a passagem dos parametros,
ele da algum erro na execução, ou ele executa com sucesso apenas na grava no banco?

o comando .ExecuteNonQuery(); retorna quantas linhas foram afetdas, caso execute 100%
voce pode fazer o teste,

int linhasAfetadas = cmd.ExecuteNonQuery();

e veja se o banco retorna alguma.

att,
Chiodini

Wilson
   - 28 jan 2014

Bom, se considerar a seguinte estrutura de tabela:
#Código

CREATE TABLE `perfil` (
  `nmlogin` varchar(50) NOT NULL,
  `senh` varchar(50) NOT NULL,
  `nmreal` varchar(75) NOT NULL,
  `mail` varchar(200) NOT NULL,
  `curs` varchar(50) NOT NULL,
  `esco` varchar(75) NOT NULL,
  `disc` varchar(50) NOT NULL,
  `modu` varchar(50) NOT NULL,
  `peri` varchar(50) NOT NULL,
  `moti` varchar(50) NOT NULL,
  `ID` int(6) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


E considerar a seguinte procedure:
#Código
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `altera_perfil`(
	mnlogin  varchar(50), 
	senh    varchar(50),
	nmreal  varchar(75),
	mail   varchar(200), 
	curs    varchar(50), 
	esco    varchar(75),
	disc    varchar(50),
	modu    varchar(50), 
	peri    varchar(50), 
	moti    varchar(50),   
	NUMBER1      int(6)
)
begin
	UPDATE `test`.`perfil`
		SET
		`nmlogin` = mnlogin,
		`senh` = senh,
		`nmreal` = nmreal,
		`mail` = mail,
		`curs` = curs,
		`esco` = esco,
		`disc` = disc,
		`modu` = modu,
		`peri` = peri,
		`moti` = moti
	WHERE `ID` = NUMBER1;

/* select * from `test`.`perfil` where `ID` = NUMBER1; */
END$$
DELIMITER ;


Tive problemas com o nome do campo ID, então mudei para number (só pra não ficar com o mesmo nome do da tabela) e deu tudo certo.

Wolfalone
   - 31 jan 2014

A procedure que eu utilizei esta abaixo: Espero que ajude a determinar o problema.

DELIMITER $$

CREATE DEFINER=`wolfalone`@`localhost` PROCEDURE `altera_perfil`(IN nmlogin VARCHAR(30), IN senh VARCHAR(12), IN nmreal VARCHAR(50),
IN mail VARCHAR(80), IN curs VARCHAR(40), IN esco VARCHAR(40), IN disc VARCHAR(40), IN modu CHAR(3), IN peri VARCHAR(10), IN moti TEXT, IN id INT)
BEGIN
DECLARE excessao SMALLINT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1;

IF ( (nmlogin != '') && (senh != '') && (nmreal != '') && (mail != '') && (curs != '') && (esco != '') && (disc != '') && (modu != '') && (peri != '') && (id > 0)) THEN
START TRANSACTION;
UPDATE Login SET nome_login = nmlogin, senha_login = senh, nome_real = nmreal, email = mail, curso = curs,
escola_tecnica = esco, disciplina = disc, modulo = modu, periodo = peri, motivo = moti WHERE aluno_ID =id;
IF excessao = 1
THEN
SELECT 'Erro ao inserir registro no perfil do usuário' AS Msg;
ROLLBACK;
ELSE
SELECT 'Cadastro alterado com sucesso' AS Msg;
COMMIT;
END IF;
END IF;
END