Estás a empaquetar bien el INSERT extra en junto con su SELECT con ExecuteReader(). Esto está bien.
veo dos cosas que potencialmente no son bien ... nada en el código en sí mismo, sino lo que demostramos es simplificado, y el código simplificado alude a algunos posibles malas prácticas:
El primero no es aceptable que su código parece podría usar concatenación de cadenas para sustituir valores en su consulta. Algo como esto:
MySqlCommand cmd = new MySqlCommand
(@"INSERT INTO Table(field) VALUES('" + somevariable + "');" +
"SELECT * FROM table",cn);
Eso es un gran problema, ya que abre un enorme agujero de seguridad en su aplicación.En su lugar, es necesario utilizar parámetros de consulta, por lo que el código es de la misma familia:
MySqlCommand cmd = new MySqlCommand
(@"INSERT INTO Table(field) VALUES(@somevalue);" +
"SELECT * FROM table",cn);
cmd.Parameters.Add("@somevalue", SqlDbType.VarChar, 50).Value = somevariable;
El otro problema potencial es que su comando y, más importante, su conexión, debe ser envuelto en un bloque try/finally (o de preferencia un bloque mediante), así:
using (var cn = new MySqlConnection("..."))
using (var cmd = new MySqlCommand("@INSERT INTO Table(field).... ", cn))
{
cmd.Parameters.Add(...);
cn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
//...
}
}
}
Afortunadamente, su código real no selecciona todas las filas de la tabla en cada inserción. Eso escalará ... mal. –
Realmente va a matar su rendimiento si trato de 'SELECCIONAR' DESDE toda la tabla. Acabo de establecer como ejemplo –
posible duplicado de [SQLCommand.ExecuteReader() no se limita a las declaraciones de solo lectura] (http://stackoverflow.com/questions/3348012/sqlcommand-executereader-does-not-restrict-to- read-only-statements) – nawfal