|
<< Click to Display Table of Contents >> MySQL - Stored Procs com parametros out |
![]() ![]()
|
No banco
Função insere o cliente e retorna o código inserido
CREATE DEFINER = 'root'@'localhost' PROCEDURE `inserir_cliente`(
IN inome VARCHAR(50),
IN icpf VARCHAR(11),
IN iemail VARCHAR(50),
IN isexo CHAR(1),
IN idata DATE,
IN iestado_civil CHAR(1),
OUT oid INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO `tb_cliente`(`id_cliente`, `nome`, `cpf`, `email`, `sexo`,
`data`, `estado_civil`) VALUE (id_cliente, inome, icpf, iemail, isexo,
idata, iestado_civil);
-- retorna ultimo valor no parametro de saida
select
LAST_INSERT_ID()
into oid;
END;
Na programação
// cria uma conexao
MySqlConnection conexao = new MySqlConnection("connection string");
var cliente = new { Id = 0, Nome = "", Cpf = "" };
// cria um command (no sql é o nome da stored proc)
MySqlCommand cmd = new MySqlCommand("inserir_cliente", conexao);
cmd.CommandType = CommandType.StoredProcedure;
// definindo parametros de entrada da stored proc
cmd.Parameters.AddWithValue("iid", cliente.Id);
cmd.Parameters.AddWithValue("inome", cliente.Nome);
cmd.Parameters.AddWithValue("icpf", cliente.Cpf);
// configurando parametros de saída
cmd.Parameters.Add("oid", MySqlDbType.Int32);
cmd.Parameters["oid"].Direction = ParameterDirection.Output;
try
{
// sempre usar ExecuteNonQuery para parâmetros de saída
cmd.ExecuteNonQuery();
int id_gerado = Convert.ToInt32(cmd.Parameters["oid"].Value);
}
catch (Exception)
{
// ....
}