Principales respuestas
error al grabar datos en una base de datos de access

Pregunta
-
hola a todos: tengo la siguiente funcion:
Function GuardarProveedor(ByVal TipoIdProv As String, ByVal idProv As String, ByVal tipoProv As String, ByVal denoprov As String, ByVal Residente As String, ByVal pais As String, ByVal tiporegi As String, ByVal fechaRegistro As String, ByVal fechaUltCambio As String, ByVal PaisEfectPagoGen As String, ByVal PaisEfectPagoParFis As String, ByVal denopago As String, ByVal PaisEfecPago As String, ByVal aplicConvDobTrib As String, ByVal pagExtSujRetNorLeg As String, ByVal pagRegFis As String, ByVal tipoContribuyente As String, ByVal partRel As String, Optional ByVal Telefono As String = "", Optional ByVal Direccion As String = "", Optional ByVal Correo As String = "") As String Dim strMensajeGuardado As String = "" Dim sqlGenerales As String = "INSERT INTO Proveedor (TipoIdProv, idProv, tipoProv, denopro, Residente, Pais, TipoRegi, PaisEfectPagoGen, PaisEfectPagoParFis, denopago, PaisEfecPago, aplicConvDobTrib, pagExtSujRetNorLeg, pagRegFis,Telefono, tipoContribuyente, parteRel, Direccion, Correo, fechaRegistro, fechaUltCambio) VALUES (@TipoIdProv, @idProv, @tipoProv, @denopro, @Residente, @Pais, @TipoRegi, @PaisEfectPagoGen, @PaisEfectPagoParFis, @denopago, @PaisEfecPago, @aplicConvDobTrib, @pagExtSujRetNorLeg, @pagRegFis, @Telefono, @tipoContribuyente, @parteRel, @Direccion, @Correo, @fechaRegistro, @fechaUltCambio)" Dim CadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\baseDatos\Proveedor.accdb;" Dim Conexion As OleDbConnection = New OleDbConnection(CadenaConexion) Dim cmd As OleDbCommand = New OleDbCommand(sqlGenerales, Conexion) cmd.Connection.Open() cmd.Parameters.Clear() cmd.Parameters.AddWithValue("@TipoIdProv", TipoIdProv) cmd.Parameters.AddWithValue("@idProv", idProv) cmd.Parameters.AddWithValue("@tipoProv", tipoProv) cmd.Parameters.AddWithValue("@denopro", denoprov) cmd.Parameters.AddWithValue("@Residente", Residente) cmd.Parameters.AddWithValue("@Pais", pais) cmd.Parameters.AddWithValue("@TipoRegi", tiporegi) cmd.Parameters.AddWithValue("@PaisEfectPagoGen", PaisEfectPagoGen) cmd.Parameters.AddWithValue("@PaisEfectPagoParFis", PaisEfectPagoParFis) cmd.Parameters.AddWithValue("@denopago", denopago) cmd.Parameters.AddWithValue("@PaisEfecPago", PaisEfecPago) cmd.Parameters.AddWithValue("@aplicConvDobTrib", aplicConvDobTrib) cmd.Parameters.AddWithValue("@pagExtSujRetNorLeg", pagExtSujRetNorLeg) cmd.Parameters.AddWithValue("@pagRegFis", pagRegFis) cmd.Parameters.AddWithValue("@fechaRegistro", fechaRegistro) cmd.Parameters.AddWithValue("@tipoContribuyente", tipoContribuyente) cmd.Parameters.AddWithValue("@fechaUltCambio", fechaUltCambio) cmd.Parameters.AddWithValue("@parteRel", partRel) cmd.Parameters.AddWithValue("@Direccion", Direccion) cmd.Parameters.AddWithValue("@Correo", Correo) cmd.Parameters.AddWithValue("@Telefono", Telefono) cmd.ExecuteNonQuery() cmd.Connection.Close() strMensajeGuardado = "Proveedor guardado Correctamente" Return strMensajeGuardado End Function
pero al registrar los datos me los registra mal..
alguien me puede ayudar diciendome en donde esta mi error. ya rebise todos los datos del programa y llegan bien..
Respuestas
-
El proveedor OLE DB -para el marco de trabajo de .NET- utiliza marcadores de posición '?' para determinar la relación argumento-parámetro, por tanto, es importante que el orden de asignación de valores a la colección de parámetros sea el mismo en que aparecen los parámetros en la consulta sql.
Nota -por ejemplo- que en la consulta sql que adjuntas el último parámetro es @fechaUltCambio, sin embargo en la asignación de valores a la colección de parámetros el último parámetro al que se asigna un valor es @Telefono, es incorrecto.
Deberías seguir la siguiente sintaxis:
Dim sqlGenerales As String = "INSERT INTO Proveedor (Id, Nombre, Direccion VALUES (?, ?, ?))" '... cmd.Paremeters.AddWithValue("@Id", valor1) 'Primera posición ? cmd.Paremeters.AddWithValue("@Nombre", valor2) 'Segunda posición ? cmd.Paremeters.AddWithValue("@Direccion", valor3) 'Tercera posición ? '...
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Rolando Salvatierra domingo, 11 de junio de 2017 17:38
Todas las respuestas
-
El proveedor OLE DB -para el marco de trabajo de .NET- utiliza marcadores de posición '?' para determinar la relación argumento-parámetro, por tanto, es importante que el orden de asignación de valores a la colección de parámetros sea el mismo en que aparecen los parámetros en la consulta sql.
Nota -por ejemplo- que en la consulta sql que adjuntas el último parámetro es @fechaUltCambio, sin embargo en la asignación de valores a la colección de parámetros el último parámetro al que se asigna un valor es @Telefono, es incorrecto.
Deberías seguir la siguiente sintaxis:
Dim sqlGenerales As String = "INSERT INTO Proveedor (Id, Nombre, Direccion VALUES (?, ?, ?))" '... cmd.Paremeters.AddWithValue("@Id", valor1) 'Primera posición ? cmd.Paremeters.AddWithValue("@Nombre", valor2) 'Segunda posición ? cmd.Paremeters.AddWithValue("@Direccion", valor3) 'Tercera posición ? '...
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Rolando Salvatierra domingo, 11 de junio de 2017 17:38
-
-