none
Sintaxis incorrecta cerca de '@TotalAPagar'

    Pregunta

  • Buen dia.

    se me presento un problema a la hora de enviar la informacion de un DataGridView a una tabla SQL Server: mi codigo es el siguiente:

    Public Sub Pago()
            Try
                Dim IdPagoAño As Integer = 0
                Dim cmd As SqlCommand = New SqlCommand("GuardarPagoAño")
    
    
                cnn.Open()
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Connection = cnn
    
                cmd.Parameters.AddWithValue("@CodigoPredio", txt_codigoPredio.Text)
                cmd.Parameters.AddWithValue("@NFactura", txt_NFactura.Text)
                cmd.Parameters.AddWithValue("@FechaPago", txt_Fechahoy2.Text)
    
                IdPagoAño = Convert.ToInt32(cmd.ExecuteScalar())
    
            Catch ex As Exception
                MsgBox(ex.Message)
    
            Finally
                cnn.Close()
            End Try
    
            '-----------------------------------------------------------------°-°------------------------------------------------------
    
            Try
    
                Dim cmd As SqlCommand = New SqlCommand("INSERT INTO detallepagoaño (IdPagoAño, Año, ValorAvaluo, Tarifa, ImpuestoPredial, SobreTasaMA,SobreTasaBom, Descuento, InteresMoratorio,TotalAPagar)  values (@IdPagoAño, @Año, @ValorAvaluo, @Tarifa, @ImpuestoPredial, @SobreTasaMA, @SobreTasaBom, @Descuento, @InteresMoratorio, @TotalAPagar", cnn)
    
                cnn.Open()
                'cmd.Connection = cnn
    
                'cmd.CommandType = CommandType.StoredProcedure
                Dim Row As DataGridViewRow = New DataGridViewRow()
    
                For Each Row In DataGridViewEstado.Rows
    
                    cmd.Parameters.Clear()
    
                    cmd.Parameters.AddWithValue("@IdPagoAño", Convert.ToInt32("1"))
                    cmd.Parameters.AddWithValue("@Año", Convert.ToString(Row.Cells("Año").Value))
                    cmd.Parameters.AddWithValue("@ValorAvaluo", Convert.ToDecimal(Row.Cells("Valor Avaluo").Value))
                    cmd.Parameters.AddWithValue("@Tarifa", Convert.ToDecimal(Row.Cells("Tarifa").Value))
                    cmd.Parameters.AddWithValue("@ImpuestoPredial", Convert.ToDecimal(Row.Cells("Impuesto Predial").Value))
                    cmd.Parameters.AddWithValue("@SobreTasaMA", Convert.ToDecimal(Row.Cells("Sobre Tasa MA").Value))
                    cmd.Parameters.AddWithValue("@SobreTasaBom", Convert.ToDecimal(Row.Cells("Sobre Tasa Bom").Value))
                    cmd.Parameters.AddWithValue("@Descuento", Convert.ToDecimal(Row.Cells("Descuento").Value))
                    cmd.Parameters.AddWithValue("@InteresMoratorio", Convert.ToDecimal(Row.Cells("Interes Moratorio").Value))
                    cmd.Parameters.AddWithValue("@TotalAPagar", Convert.ToDecimal(Row.Cells("Total a Pagar").Value))
    
                    cmd.ExecuteNonQuery()
                Next
                MessageBox.Show("Datos del pago guardados exitosamente", "Guardando Registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
            Catch ex As Exception
                MsgBox(ex.Message)
    
            Finally
                cnn.Close()
            End Try
        End Sub

    y el error me sale de la siguiente manera:


    JorgeLeonardoDC

    viernes, 28 de abril de 2017 17:09

Respuestas

  • {...} como hago para eliminar la ultima fila de ceros que me queda

    No tienes que eliminar ninguna fila insertada, debes de evitar insertar filas que no contienen datos.

    Por la imagen que adjuntas imagino que se está insertando la fila -del control DataGridView- que sirve para la entrada de datos, si es eso entonces basta con discriminar dicha fila de la colección, por ejemplo:

    cnn.Open()
    
    For Each Row As DataGridViewRow In DataGridViewEstado.Rows
    	If Not Row.IsNewRow Then
    		'Instrucciones
    	End If
    Next


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 29 de abril de 2017 17:50

Todas las respuestas

  • JorgeLeonardoDC,

    El mensaje de la excepción es bastante claro, deductivo, te hace falta cerrar el constructor con valores de tabla VALUES(...)

    ..., @TotalAPagar)", cnn)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 28 de abril de 2017 17:22
  • Si, tenias razón...

    pero ahora me sale este error:

     

    JorgeLeonardoDC

    viernes, 28 de abril de 2017 17:30
  • {...} pero ahora me sale este error...

    Revisa la definición de las columnas de base de datos (de la tabla en mención) cuyo tipo de dato sea decimal/numeric. Considera el número máximo de dígitos que has definido en la precisión así como en la escala, por ejemplo:

    DECLARE @Valor decimal(3,2) = 200.25;
    SELECT @Valor;
    --Error de desbordamiento aritmético al convertir numeric al tipo de datos numeric.
    GO
    
    --Para contener el valor 200.25 como mínimo debes definir 
    --5 dígitos para la precisión y 2 para la escala
    DECLARE @Valor decimal(5,2) = 200.25;
    SELECT @Valor;
    --200.25
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 28 de abril de 2017 17:42
  • si funciono.. ese era el error..

    pero ahora tengo una pregunta:

    como hago para eliminar la ultima fila de ceros que me queda:


    JorgeLeonardoDC

    viernes, 28 de abril de 2017 21:16
  • {...} como hago para eliminar la ultima fila de ceros que me queda

    No tienes que eliminar ninguna fila insertada, debes de evitar insertar filas que no contienen datos.

    Por la imagen que adjuntas imagino que se está insertando la fila -del control DataGridView- que sirve para la entrada de datos, si es eso entonces basta con discriminar dicha fila de la colección, por ejemplo:

    cnn.Open()
    
    For Each Row As DataGridViewRow In DataGridViewEstado.Rows
    	If Not Row.IsNewRow Then
    		'Instrucciones
    	End If
    Next


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 29 de abril de 2017 17:50