I want to insert a record into a table, retrieve the ID that was generated by AUTO_INCREMENT
and insert records into other tables, using that ID. But, I want to do this all using BeginTransaction
.
How could I do this?
I'm doing it this way:
public void venda(Venda_ResumidaModel objVenda)
{
using (SqlConnection connection = new SqlConnection("SERVER= ;" + "DATABASE= ;" + "UID= ;" + "PASSWORD=;"))
{
SqlCommand cmd = connection.CreateCommand();
SqlTransaction transaction = null;
try
{
// BeginTransaction() Requires Open Connection
connection.Open();
transaction = connection.BeginTransaction();
// Assign Transaction to Command
cmd.Transaction = transaction;
// Execute 1st Command
cmd.CommandText = "INSERT INTO Venda(ID_Pessoa, ID_Caixa, ID_PDV, ID_Deposito, Data, Itens, Valor, Desconto, Valor_Final, Cancelada, Valor_Dinheiro, Valor_Cheque, Valor_Cartao, Valor_Crediario, Valor_Troco) " +
"values (@ID_Pessoa, @ID_Caixa, @ID_PDV, @ID_Deposito, getdate(), @Itens, @Valor, @Desconto, @Valor_Final, @Cancelada, @Valor_Dinheiro, @Valor_Cheque, @Valor_Cartao, @Valor_Crediario, @Valor_Troco)";
cmd.Parameters.AddWithValue("@ID_Pessoa", objVenda.ObjProprietario.ID_Pessoa);
cmd.Parameters.AddWithValue("@ID_Caixa", objVenda.ObjCaixa.ID_Caixa);
cmd.Parameters.AddWithValue("@ID_PDV", 1);
cmd.Parameters.AddWithValue("@ID_Deposito", 1);
cmd.Parameters.AddWithValue("@Itens", objVenda.Itens);
cmd.Parameters.AddWithValue("@Valor", objVenda.Valor_Venda);
cmd.Parameters.AddWithValue("@Desconto", objVenda.Desconto);
cmd.Parameters.AddWithValue("@Valor_Final", objVenda.Valor_final);
cmd.Parameters.AddWithValue("@Cancelada", 'N');
cmd.Parameters.AddWithValue("@Valor_Dinheiro", objVenda.Valor_dinheiro);
cmd.Parameters.AddWithValue("@Valor_Cheque", objVenda.Valor_cheque);
cmd.Parameters.AddWithValue("@Valor_Cartao", objVenda.Valor_cartao);
cmd.Parameters.AddWithValue("@Valor_Crediario", objVenda.Valor_crediario);
cmd.Parameters.AddWithValue("@Valor_Troco", objVenda.Valor_troco);
cmd.Parameters.AddWithValue("@id", 0).Direction = ParameterDirection.Output;
cmd.ExecuteScalar();
// Execute 2nd Command
if (objVenda.Valor_dinheiro > 0)
{
cmd.CommandText = "Insert into Caixa_Movimentacao (Caixa, Data_Movimentacao, Tipo, Valor, Forma_Pagamento)" +
"values (@Caixa, getdate(), 6, @Valor_, 1)";
cmd.Parameters.AddWithValue("@Caixa", objVenda.ObjCaixa.ID_Caixa);
cmd.Parameters.AddWithValue("@Valor_", objVenda.ValorVenda);
cmd.ExecuteNonQuery();
}
int retorno = Convert.ToInt32(cmd.Parameters["@id"].Value);
cmd.CommandText = "insert into Venda_Item_Servico (Id_venda, ID_Servico, Valor_Venda, Desconto, Valor_Total) values ("+ retorno +", @ID_Servico, @Valor_Venda, @Desconto, @Valor_Total)";
//cmd.Parameters.AddWithValue("@id", objVenda);
cmd.Parameters.AddWithValue("@ID_Servico", objVenda.ObjServico.Codigo);
cmd.Parameters.AddWithValue("@Valor_Venda", objVenda.ObjServico.Valor_Venda);
//cmd.Parameters.AddWithValue("@Desconto", objVenda);
cmd.Parameters.AddWithValue("@Valor_Total", objVenda.ObjServico.Valor_Venda);
cmd.ExecuteNonQuery();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
finally
{
connection.Close();
}
}