Inquiridor
Registro sendo incluído 2 vezes - OleDb

Pergunta
-
Salve!
Cenário: aplicação Web-MVC, Visual Studio 2013 Express, banco: Access
Além do projeto do site (MVC), a aplicação tem um projeto do domínio da aplicação onde estão as classes das entidades, contextos e de negócios, conforme esquema abaixo:
Enquete.Dominio
- Aplicacao
- Contextos
- Entidades
Em Contextos, tenho uma classe com o código abaixo:
using System; using System.Configuration; using System.Data; using System.Data.OleDb; namespace EnqueteWeb.Dominio.Model.Contextos { public class BancoAplicacao : IDisposable { private readonly OleDbConnection conexao; public BancoAplicacao() { conexao = new OleDbConnection(ConfigurationManager.ConnectionStrings["BancoAplicacao"].ConnectionString); conexao.Open(); } public void ExecutaAtualizacao(string strQuery) { var cmd = new OleDbCommand { CommandText = strQuery, CommandType = CommandType.Text, Connection = conexao }; cmd.ExecuteNonQuery(); } public void Dispose() { if (conexao.State == ConnectionState.Open) conexao.Close(); } } }
Em Aplicacao, tenho uma classe que tem o código abaixo (por clareza, estou mostrando somente o método que está apresentando o problema):
using EnqueteWeb.Dominio.Model.Contextos; using EnqueteWeb.Dominio.Model.Entidades; using System; using System.Collections.Generic; using System.Data.OleDb; using System.Linq; namespace EnqueteWeb.Dominio.Model.Aplicacao { public class Enquetes { private BancoAplicacao banco; public void RegistrarVoto(Votante votante, Voto voto) { // Registra o voto var strQueryVoto = "INSERT INTO Votos (enqueteID, respostaID ) "; strQueryVoto += string.Format("VALUES ( {0}, {1} )", voto.EnqueteId, voto.RespostaId); // Registra o votante var strQueryVotante = "INSERT INTO Votantes (enqueteID, dtVoto, nome ) "; strQueryVotante += string.Format("VALUES ( {0}, #{1}#, '{2}' ) ", votante.EnqueteId, votante.DtVoto, votante.Nome); using (banco = new BancoAplicacao()) { banco.ExecutaAtualizacao(strQueryVoto); banco.ExecutaAtualizacao(strQueryVotante); } } } }
Bem, ao executar os códigos acima, o que está acontecendo é que são incluídos 2 registros em cada uma das tabelas!
Tentei uma alteração no código do método RegistrarVoto, na classe Enquetes.cs, para:
using EnqueteWeb.Dominio.Model.Contextos; using EnqueteWeb.Dominio.Model.Entidades; using System; using System.Collections.Generic; using System.Data.OleDb; using System.Linq; namespace EnqueteWeb.Dominio.Model.Aplicacao { public class Enquetes { private BancoAplicacao banco; public void RegistrarVoto(Votante votante, Voto voto) { // Registra o voto var strQueryVoto = "INSERT INTO Votos (enqueteID, respostaID ) "; strQueryVoto += string.Format("VALUES ( {0}, {1} )", voto.EnqueteId, voto.RespostaId); using (banco = new BancoAplicacao()) { banco.ExecutaAtualizacao(strQueryVoto); } // Registra o votante var strQueryVotante = "INSERT INTO Votantes (enqueteID, dtVoto, nome ) "; strQueryVotante += string.Format("VALUES ( {0}, #{1}#, '{2}' ) ", votante.EnqueteId, votante.DtVoto, votante.Nome); using (banco = new BancoAplicacao()) { banco.ExecutaAtualizacao(strQueryVotante); } } } }
Continuou acontecendo a mesma coisa: 2 registros incluídos em cada uma das tabelas.
Tentei uma modificação na classe BancoAplicacao, retirando a inicialização da conexão ao instanciar a classe, para:
using System; using System.Configuration; using System.Data; using System.Data.OleDb; namespace EnqueteWeb.Dominio.Model.Contextos { public class BancoAplicacao : IDisposable { private OleDbConnection conexao; public void ExecutaAtualizacao(string strQuery) { conexao = new OleDbConnection(ConfigurationManager.ConnectionStrings["BancoAplicacao"].ConnectionString); conexao.Open(); var cmd = new OleDbCommand { CommandText = strQuery, CommandType = CommandType.Text, Connection = conexao }; cmd.ExecuteNonQuery(); } public void Dispose() { if (conexao.State == ConnectionState.Open) conexao.Close(); } } }
O problema continua.
Por favor, alguém pode me mostrar onde estou errando?
Grato pela atenção de todos.
Paulo Ricardo Ferreira