none
Problema con Query en OleDB en c# RRS feed

  • Pregunta

  • Hola, estoy haciendo un pequeño programa utilizando una base de datos de access 2007 y oleDB para la conexion, en mi base de datos tengo una tabla llamada clientes la cual tiene un campo autonumerado, el problema es que cada vez que intento agregar un registro nuevo a la base de datos mediante insert por mas que la inserción haya fallado el campo autonumerado avanza segun el seed entonces cada vez que agrego un registro valido a la base de datos el autonumerado pierde correlacion(se saltea segun el numero de intentos fallidos)

    Este es El Código Que estoy utilizando:

            public bool InsertElement(string _name, string _lastName, string _documento)
            {
                bool fl;
                try
                {
                    string _code = "CL51";
                   // OleDbConnection MyConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User ID=;Password=; Data Source=DataBase.mdb;Persist Security Info=False");
                    OleDbCommand CommandQuery = new OleDbCommand("INSERT INTO Clientes(Nombres, Apellidos, Documento ,COD) VALUES('" + _name + "','" + _lastName + "','" + _documento + "','" + _code + "')", conn);
                    OleDbDataAdapter add = new OleDbDataAdapter();
                    conn.Open();
                    add.InsertCommand = CommandQuery;
                    add.InsertCommand.ExecuteNonQuery();
                    conn.Close();
                    fl = true;
                }
                catch { fl = false; }
                return fl;
            }

    Puede alguien ayudarme con esto ???

    ...Gracias es todo por ahora.

    miércoles, 11 de julio de 2012 15:55

Respuestas

Todas las respuestas

  • que raro que genere un id nuevo si el insert falla, estas seguro que el registro no se crea

    ademas porque no usas parametros, no necesitas un dataadapter para un insert, usa el OleDbCommand

    Dim query As String "INSERT INTO Clientes(Nombres, Apellidos, Documento ,COD) VALUES(@name, @lastName, @documento, @code)"

    OleDbCommand cmd= new OleDbCommand(query, conn);

    cmd.Parameters.AddwithValue("@name", _name)

    cmd.Parameters.AddwithValue("@lastName", _lastName)

    cmd.Parameters.AddwithValue("@documento", _documento)

    cmd.Parameters.AddwithValue("@code", _code)

    cmd.ExecuteNonQuery()

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 11 de julio de 2012 16:24
  • Gracias por la respuesta no sabia lo de los parametros, en lo del autonumerado estoy seguro de que el registro no se crea sin embargo el autonumeral avanza, lo he probado varias veces incluso sin el try/catch, la base de datos no permite insertar datos si la variable _code esta repetida en la tabla (estoy asignando ese valor manualmente por el momento) y cada vez que intenta hacer el insert el autonumerado si avanza pero el registro no se crea he verificado varias veces la base de datos...
    miércoles, 11 de julio de 2012 16:31
  • Dim query As String "INSERT INTO Clientes(Nombres, Apellidos, Documento ,COD) VALUES(@name, @lastName, @documento, @code)"

    Si estas utilizando C# no no seria Dim Query As String porque eso se hace en Visual Basic.net

    seria de esta manera String =

    "INSERT INTO Clientes(Nombres, Apellidos, Documento ,COD) VALUES(@name, @lastName, @documento, @code)" ;

    y lo demas que es pasar la conexion al command y pasar sus respectivos parametros...

    OleDbCommand cmd= new OleDbCommand(query, conn);

    cmd.Parameters.AddwithValue("@name", _name)

    cmd.Parameters.AddwithValue("@lastName", _lastName)

    cmd.Parameters.AddwithValue("@documento", _documento)

    cmd.Parameters.AddwithValue("@code", _code)

    cmd.ExecuteNonQuery()

    Suerte...



    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    miércoles, 11 de julio de 2012 19:30
  • la base de datos no permite insertar datos si la variable _code esta repetida en la tabla

    eso es porque seguro es el campo key de la tabla, tienes que generar uns ecuancial

    [ADO.NET] Parte 5 - Ejemplos Simples Operaciones CRUD

    analiza el metodo MaxId()

    asi puedes generar el secuancial

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta IORUSOUL lunes, 16 de julio de 2012 14:53
    miércoles, 11 de julio de 2012 20:13
  • Gracias es muy útil esa información...
    lunes, 16 de julio de 2012 14:53