ERRO SQLCOMMAND INSERT

JOAOBENEVIDES 10/02/2017 00:49:36
#471521
Ola Pessoal estou usando a seguinte funcao :

using (SqlCommand cmd = new SqlCommand())
{
try
{
for (int i = 0; i < this.Aluno_cursos.Quantidade_Parcela; i++)
{
sql = [Ô]INSERT INTO dbo.Boletos (Cod_Aluno,Data_Processamento,Data_Referencia,Data_Vencimento,Data_Contabilidade,Valor_Boleto,Valor_Bonificacao,[Ô];
sql += [Ô]Status,Cod_Usuario, Parcela,cod_curso) VALUES ( @codaluno,@Data_Processamento,@Data_Referencia,@Data_Vencimento,@Data_Contabilidade,[Ô];
sql += [Ô]@Valor_Boleto,@Valor_Bonificacao,@Status,@Cod_Usuario,@Parcela,@cod_curso)[Ô];

cmd.CommandText = sql;

cmd.Parameters.AddWithValue([Ô]@codaluno[Ô], this.Cod_Aluno);
cmd.Parameters.AddWithValue([Ô]@Data_Processamento[Ô], Funcao.Funcao.Now2());
cmd.Parameters.AddWithValue([Ô]@Data_Referencia[Ô], Funcao.Funcao.Now2());
cmd.Parameters.AddWithValue([Ô]@Data_Contabilidade[Ô], Funcao.Funcao.Now2());
if (this.Aluno_cursos.Valor_Taxa_Matricula > 0)
{
cmd.Parameters.AddWithValue([Ô]@Parcela[Ô], i);
cmd.Parameters.AddWithValue([Ô]@Data_Vencimento[Ô], Funcao.Funcao.Now2());
cmd.Parameters.AddWithValue([Ô]@Valor_Boleto[Ô], this.Aluno_cursos.Valor_Taxa_Matricula);
cmd.Parameters.AddWithValue([Ô]@Valor_Bonificacao[Ô], this.Aluno_cursos.Valor_Taxa_Matricula);


}
else
{
DataBoleto = DataBoleto.AddDays(30);
cmd.Parameters.AddWithValue([Ô]@Parcela[Ô], i);
cmd.Parameters.AddWithValue([Ô]@Data_Vencimento[Ô], DataBoleto);
cmd.Parameters.AddWithValue([Ô]@Valor_Boleto[Ô], this.Aluno_cursos.Valor_Parcela);
cmd.Parameters.AddWithValue([Ô]@Valor_Bonificacao[Ô], this.Aluno_cursos.Valor_Bonificacao);

}

cmd.Parameters.AddWithValue([Ô]@Status[Ô],0);
cmd.Parameters.AddWithValue([Ô]@Cod_Usuario[Ô], Usuarios.Codigo);
cmd.Parameters.AddWithValue([Ô]@cod_curso[Ô], Aluno_cursos.Cod_Curso);

AcessoBancodeDados.ExecutaSql(cmd);
Aluno_cursos.NumeroMensalidade = AcessoBancodeDados.ProximoID([Ô]select max(num_boleto) from boletos[Ô]);
GeraEvento(this.Aluno_cursos.NumeroMensalidade);
this.Aluno_cursos.Valor_Taxa_Matricula = 0;
porem quando ele volta no for ele me disse a que a variavel @codaluno ja esta preenchida como resolver isto ?
KERPLUNK 10/02/2017 01:11:01
#471524
Resposta escolhida
Mude essa estrutura. Você precisa instanciar um SqlCommand para cada ítem, no caso, parcelas. Então seria:

for (int i = 0; i < this.Aluno_cursos.Quantidade_Parcela; i++)
{
using (SqlCommand cmd = new SqlCommand())
{
///sua lógica aqui
}
}


Você está querendo usar uma mesma instância de SqlCommand para cada parcela, quando você roda a primeira vez, você já adiciona um valor para o parâmetro @codaluno e por isso está tendo o erro. Além disso, se você usar OOP para isso, vai ter muito menos código aí e vai ser reaproveitável em outros locais.
JOAOBENEVIDES 10/02/2017 01:24:47
#471525
entao como seria um exemplo de oop para os boletos ?
KERPLUNK 10/02/2017 01:45:53
#471526
OOP é uma coisa só, não tem [Ô]para isso[Ô] ou [Ô]para aquilo[Ô] a lógica e estrutura é sempre a mesma, seja para qual for o tipo de aplicação. Pode ver vários exemplos e tutoriais no meu canal
Tópico encerrado , respostas não são mais permitidas