Cómo insertar un registro en una tabla MySQL y obtener, en la misma acción, el valor del campo clave primaria (primary key) del nuevo registro insertado, en Visual Studio .NET C Sharp (C#). Útil cuando insertamos un registro en una tabla y queremos seguir trabajando en el mismo código fuente con el registro insertado, para ello hay que conocer su clave primaria.

Ejemplo de tabla MySQL con clave primaria autonumérica

Como ejemplo, supongamos que tenemos la siguiente tabla en MySQL:

Se trata de una tabla para inventario de equipos, que tiene como clave primaria (primary key) el campo «codigo», que será autoincremental. Es decir, cuando se inserte un registro en esta tabla, no habrá que establecer un valor para este campo, se generará automáticamente.

Código fuente C# para insertar un registro en una tabla

En el caso de que quisiéramos insertar un registro en una tabla MySQL (o cualquier otro motor de base de datos como Oracle, SQL Server, PostgreSQL, MariaDB, …), si no necesitamos obtener el identificativo del registro insertado, podemos usar el método ExecuteNonQuery(), que devolverá el número de registros afectados, que en un insert normal será 1.

Como ejemplo de este método, insertaremos un registro en la tabla anterior «equipo», y el método devolverá el número de registros afectados (1 sí el insert se ha ejecutado correctamente, 0 si ha habido algún error):

El método anterior insertará un registro en la tabla «equipo» y devolverá 1 si se ha insertado correctamente, o bien 0 si ha habido algún error.

El método anterior usa una conexión a la BD, definida al principio de la clase con:

Y tendremos un método que conectará con el servidor de base de datos:

Código fuente C# para insertar un registro en una tabla y obtener el valor del campo clave primaria del registro insertado

Cuando insertamos un registro en una tabla y queremos obtener el valor de la clave primera de dicho registro, para seguir trabajando con él, usaremos el método ExecuteScalar. Este método devuelve un objeto con todos los datos del primer registro de la lista, entre ellos el campo clave primaria.

Por ejemplo, supongamos que necesitamos saber qué código se le ha asignado al equipo nuevo insertado para, tras insertarlo, agregar registros a otra tabla en maestro-detalle de las tareas del equipo. En este caso necesitaremos saber qué valor tiene el campo «codigo» de la tabla «equipo» del registro insertado.

Para ello podremos usar el siguiente código:

En este caso el código para insertar un registro es similar al anterior, pero con dos cambios importantes:

a) Por un lado, hemos insertado al final de la consulta SQL de INSERT, el texto:

; SELECT LAST_INSERT_ID()

Si usamos el motor de base de datos SQL Server, cambiaremos el texto anterior por

;SELECT SCOPE_IDENTITY()

b) Por otro lado, hemos cambiado el método ExecuteNonQuery por ExecuteScalar. De esta forma, se ejecutará la consulta SQL de insert, y a continuación se ejecutará el procedimiento «LAST_INSERT_ID()» que devolverá el valor del campo clave primaria del registro insertado. Este será el valor que devuelva el método insertarEquipo.

Por lo tanto, si ejecutamos el método insertarEquipo usando el método ExecuteScalar, de la siguiente forma:

En el ejemplo anterior de uso, en la variable codigoRegistroNuevo se almacenará el valor numérico del campo «codigo» de la tabla «equipo» del registro insertado. Con este valor podremos operar para realizar la acción que necesitemos.