Cómo insertar datos generando la clave primaria automáticamente

Quiero insertar datos generando la clave principal automáticamente no sé cómo puedo generarla

Hay 17 columnas, la primera columna contiene la clave principal, la segunda columna comienza desde Nombre.

Recibo un error mientras ejecuto ExecuteNonQuery ().

El error es:

La cantidad de valores de consulta y campos de destino no es la misma.

Obviamente, sé por qué recibo este error porque estoy insertando datos para 16 columnas, no para las 17, pero

No sé cómo insertar un comando generando una clave principal.

la columna de clave principal es la primera y su nombre es CustomerId.

El código que estoy usando es

OleDbCommand cmd = new OleDbCommand("insert into realtimedata values('" + Name+ "','" + Symbol+ "','" + D + "','" + Green + "','" + GB + "','" + GS + "','" + GBIntraBuy + "','" + GBTR1Buy + "','" + GBTR2Buy + "','" + GBTR3Buy + "','" + GBIntraSell + "','" + GBTR1Sell + "','" + GBTR2Sell + "','" + GBTR3Sell + "','" + GRSTL + "','" + Red + "');", con);
OleDbCommand cmd1 = new OleDbCommand("select CustomerId from realtimedata where (SecSym='" + Symbol + "')order by CustomerId", con);
temp = 0;
try
{
    object count = cmd1.ExecuteScalar();
    if ((count == "") || (count == null) )
    {
        cmd.ExecuteNonQuery();
        if (temp > 0)
        {
            //MessageBox.Show("One Record Added");
        }
        else
        {
            // MessageBox.Show("Record not added");
        }
    }
}
catch
{
    // con.Close();
}

Gracias por adelantado.

preguntado el 08 de noviembre de 11 a las 12:11

"generar la clave principal automáticamente". No lo hagas. ¿Cómo va a manejar la concurrencia? ¿Qué pasa si dos usuarios solicitan una clave al mismo tiempo? Pasarás mucho tiempo reinventando la rueda. Por favor, por el amor de Dios y los dos gatitos que de otra manera mataría, solo use una columna de autonumeración o explique realmente claro por qué cree que no puede usar eso. -

3 Respuestas

Su declaración de inserción debe ser más explícita. Debe especificar qué campos reciben qué valores.

"insert into realtimedata(column1, column2, ... ,columnN) values('" + Name+ "','" + Symbol+ "','" + D + "','" + Green + "','" + GB + "','" + GS + "','" + GBIntraBuy + "','" + GBTR1Buy + "','" + GBTR2Buy + "','" + GBTR3Buy + "','" + GBIntraSell + "','" + GBTR1Sell + "','" + GBTR2Sell + "','" + GBTR3Sell + "','" + GRSTL + "','" + Red + "');"

respondido 08 nov., 11:16

En MsAccess, abra la tabla en la vista de diseño y haga que la primera columna sea "AutoNum"Columna

respondido 08 nov., 11:16

Entonces puede que no lo hayas hecho correctamente. Esa es la configuración o atributo que afecta este comportamiento en Access. - Charles Bretana

En realidad, los errores establecen que

INSERT INTO (number of fields here)
VALUES (is not equal to number here)

O no inserte la clave principal, créela como Número automático

respondido 08 nov., 11:17

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.