none
No guarda el registro en la BD RRS feed

  • Pregunta

  • Como estas?? tengo el mismo inconveniente que tu tenias con el codigo; te escribo mi funcion, ella funciona pero veo que no guarda el registro en la BD. me podrias ayudar?

    Public Shared Function Insert(usuario As UsuarioEntity) As UsuarioEntity

            Using conn As New OleDbConnection(ConfigurationManager.ConnectionStrings("default").ToString())
            conn.Open()

                Dim sql As String = "INSERT INTO Usuarios (" & _
                                            "Codigo_Usuario " & _
                                            ",Cedula " & _
                                            ",Nombre_Apellido " & _
                                            ",Email " & _
                                            ",Clave_Usuario) " & _
                                       "VALUES (" & _
                                            "@Codigo_Usuario, " & _
                                            "@Cedula, " & _
                                            "@Nombre_Apellido, " & _
                                            "@Email, " & _
                                            "@Password);"

                Dim command As New OleDbCommand(sql, conn)

                command.Parameters.AddWithValue("@Codigo_Usuario", usuario.Codigo_Usuario)
                command.Parameters.AddWithValue("@Cedula", usuario.Cedula)
                command.Parameters.AddWithValue("@Nombre_Apellido", usuario.Nombre_Apellido)
                command.Parameters.AddWithValue("@Email", usuario.Email)

                Dim Clave_Usuario As String = Helper.EncodePassword(String.Concat(usuario.Codigo_Usuario, usuario.Clave_Usuario))
                command.Parameters.AddWithValue("@Clave_Usuario", Clave_Usuario)

               
                command.ExecuteNonQuery()

                Dim cmd2 As New OleDbCommand("SELECT @@IDENTITY", conn)
                usuario.Id = Convert.ToInt32(cmd2.ExecuteScalar())

                Return usuario
            End Using
        End Function


    Enyelber Altube
    lunes, 3 de octubre de 2011 18:12

Respuestas

  • "Enyelber Altube" escribió:

    > esta es la cadena
    >
    > connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
    > Data Source=ODF.mdb;Persist Security Info=True"
    >
    > de hecho no me muestra error, me corre perfectamente,
    > pero cuando voy a la base de datos para verificar si
    > se guardo el registro no aparece...

    ¡Bueno! Al menos ya sé que la base de datos de Access que utiliza tu aplicación es la que se encuentra en la misma carpeta que el ejecutable de tu aplicación.

    Si has añadido la base de datos al proyecto, cada vez que pulses la tecla F5 para ejecutar el proyecto en el IDE de Visual Studio, por defecto siempre se copia la base de datos original a la carpeta Debug o Release, sobrescribiendo la ya existente, por lo que da la sensación de que los registros no se insertan o se actualizan en la base de datos.

    Pero ésto solamente ocurre cuando ejecutas tu proyecto dentro del IDE de Visual Studio. Si ejecutas el propio archivo ejecutable, observarás que eso no sucede.

    Si no deseas que se sobrescriba la base de datos cada vez que pulses la tecla F5, desde el Explorador de proyectos selecciona el archivo de Access y pulsa la tecla F4. En la ventana Propiedades selecciona la opción "Copiar en el directorio de resultados", y selecciona cualquier otro valor distinto a 'Copiar siempre', como puede ser 'Copiar si es posterior'.

     


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    • Marcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    martes, 4 de octubre de 2011 6:15
    Moderador
  • hola

    el punto clave que ahs comentado es que la db Access esta integrada al Visual Studio

    o sea puedes ver esta base .mdb listada en el "Solution Explorer", si es asi recuerda que el VS crea una copia de la misma en la carpeta \bin\Debug del proyecto y es a esta a la cual se conecta

    cada vez que detengas he inicies la aplciacion desde el VS este volvera a copiar la db pisando la anterior, por eso es que los datos los pierdes

    - valida que en la carpeta \bin\Debug tienes una copia del .mdb, abre la db con Ms Access y valida que alli esten las actualizacion

    - para evitar esto deberia definir la ruta completa al mdb en el connection string para que se conecte al archivo que esta bajo el proyecto, y no el que se copia junto al .exe de forma automatica

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    martes, 4 de octubre de 2011 0:40

Todas las respuestas

  • "Enyelber Altube" escribió:

    > pero veo que no guarda el registro en la BD.
    >
    > Using conn As New OleDbConnection(_
    > ConfigurationManager.ConnectionStrings("default").ToString())
    >

    Hola:

    El contenido de la cadena de conexión, ¿te importaría escribirlo completo?

    > Dim cmd2 As New OleDbCommand("SELECT @@IDENTITY", conn)

    ¿Estás trabajando con una base de Access, de SQL Server, Oracle, MySQL, un archivo de texto? ¿El archivo de datos lo has añadido a tu proyecto de Visual Basic, o la base de datos se encuentra alojada dentro de un servidor, como bien pudiera ser un servidor SQL Server?

    Responde primero a las preguntas y asimismo explica un poco lo que deseas hacer y el problema que estás teniendo.
     
    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    lunes, 3 de octubre de 2011 18:28
    Moderador
  • Hola;

    Estoy trabajando en una Base de Datos en Access, esta añadido a mi proyecto, la vincule al proyecto, de hecho hice un formulario de login y funciona perfecto permitiendome asi logearme, pero al llegar a crear el usuario me da ese error.

    Public Shared Function Insert(usuario As UsuarioEntity) As UsuarioEntity

            Using conn As New OleDbConnection(ConfigurationManager.ConnectionStrings("default").ToString())

                conn.Open()

                Dim sql As String = "INSERT INTO Usuarios (Codigo_Usuario,Cedula,Nombre_Apellido,Email,Clave_Usuario) VALUES (@Codigo_Usuario, @Cedula, @Nombre_Apellido, @Email, @Clave_Usuario)"

                Dim command As New OleDbCommand(sql, conn)

                command.Parameters.AddWithValue("@Codigo_Usuario", usuario.Codigo_Usuario)
                command.Parameters.AddWithValue("@Cedula", usuario.Cedula)
                command.Parameters.AddWithValue("@Nombre_Apellido", usuario.Nombre_Apellido)
                command.Parameters.AddWithValue("@Email", usuario.Email)

                Dim Clave_Usuario As String = Helper.EncodePassword(String.Concat(usuario.Codigo_Usuario, usuario.Clave_Usuario))
                command.Parameters.AddWithValue("@Clave_Usuario", Clave_Usuario)

                command.ExecuteNonQuery()

                Dim cmd2 As New OleDbCommand("SELECT @@IDENTITY", conn)
                usuario.Id = Convert.ToInt32(cmd2.ExecuteScalar())

                Return usuario
            End Using
        End Function

    Enyelber Altube
    lunes, 3 de octubre de 2011 18:43
  • > pero al llegar a crear el usuario me da ese error.

    ¿Qué error te da? Me refiero al mensaje de descripción del error.

    > ConfigurationManager.ConnectionStrings("default").ToString

    Insisto que no estaría de más que publicases la cadena de conexión completa que utilizas en el proyecto para conectarte con tu base de Access.

    Si no sabes cual es, ejecuta

      MessageBox.Show(ConfigurationManager.ConnectionStrings("default").ToString)

    y anota el valor que te aparezca en el cuadro de diálogo.

     

     


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    lunes, 3 de octubre de 2011 18:58
    Moderador
  • perdon no entendia esta es la cadena

    connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ODF.mdb;Persist Security Info=True"

    de hecho no me muestra error, me corre perfectamente, pero cuando voy a la base de datos para verificar si se guardo el registro no aparece...


    Enyelber Altube
    lunes, 3 de octubre de 2011 19:02
  • Necesitas alguna otra cosa mas, llevo toda la tarde y no logro que guarde en la BD.
    Enyelber Altube
    lunes, 3 de octubre de 2011 21:09
  • hola

    el punto clave que ahs comentado es que la db Access esta integrada al Visual Studio

    o sea puedes ver esta base .mdb listada en el "Solution Explorer", si es asi recuerda que el VS crea una copia de la misma en la carpeta \bin\Debug del proyecto y es a esta a la cual se conecta

    cada vez que detengas he inicies la aplciacion desde el VS este volvera a copiar la db pisando la anterior, por eso es que los datos los pierdes

    - valida que en la carpeta \bin\Debug tienes una copia del .mdb, abre la db con Ms Access y valida que alli esten las actualizacion

    - para evitar esto deberia definir la ruta completa al mdb en el connection string para que se conecte al archivo que esta bajo el proyecto, y no el que se copia junto al .exe de forma automatica

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    martes, 4 de octubre de 2011 0:40
  • "Enyelber Altube" escribió:

    > esta es la cadena
    >
    > connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
    > Data Source=ODF.mdb;Persist Security Info=True"
    >
    > de hecho no me muestra error, me corre perfectamente,
    > pero cuando voy a la base de datos para verificar si
    > se guardo el registro no aparece...

    ¡Bueno! Al menos ya sé que la base de datos de Access que utiliza tu aplicación es la que se encuentra en la misma carpeta que el ejecutable de tu aplicación.

    Si has añadido la base de datos al proyecto, cada vez que pulses la tecla F5 para ejecutar el proyecto en el IDE de Visual Studio, por defecto siempre se copia la base de datos original a la carpeta Debug o Release, sobrescribiendo la ya existente, por lo que da la sensación de que los registros no se insertan o se actualizan en la base de datos.

    Pero ésto solamente ocurre cuando ejecutas tu proyecto dentro del IDE de Visual Studio. Si ejecutas el propio archivo ejecutable, observarás que eso no sucede.

    Si no deseas que se sobrescriba la base de datos cada vez que pulses la tecla F5, desde el Explorador de proyectos selecciona el archivo de Access y pulsa la tecla F4. En la ventana Propiedades selecciona la opción "Copiar en el directorio de resultados", y selecciona cualquier otro valor distinto a 'Copiar siempre', como puede ser 'Copiar si es posterior'.

     


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    • Marcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    martes, 4 de octubre de 2011 6:15
    Moderador
  • "Enyelber Altube" preguntó:

    > Necesitas alguna otra cosa mas, llevo toda la tarde
    > y no logro que guarde en la BD.

    Como observo que eres nuevo en el foro, como moderador que soy del mismo te diré que, si deseas obtener una respuesta rápida, en tu mensaje inicial tienes que facilitar la máxima información posible para que los demás usuarios tengan datos suficiente para poder averiguar el motivo de lo que te está ocurriendo.

    Si la cadena de conexión la hubieras indicado desde un primer momento, te aseguro que no te hubieras pasado toda la tarde sin lograr guardar datos en la BD. :-)


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    • Marcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    • Desmarcado como respuesta Enyelber Altube martes, 4 de octubre de 2011 13:10
    martes, 4 de octubre de 2011 6:20
    Moderador
  • Muchas Gracias, tendre en cuenta tu comentario. ya pude observar que si se almacena.
    Enyelber Altube
    martes, 4 de octubre de 2011 13:10