0

Mi base de datos está diseñada de tal forma que la inserción de fechas está bajo el formato años/meses/días y a la hora de enviar el contenido de ese control mediante c# a la base de datos, desconozco de la sentencia adecuada para convertirlo y para enviarlo bajo ese mismo formato. Este dato lo estoy capturando mediante un DataTimePicker

string agregar = "insert into values('" + txtIDUsuario.Text + "'," + "md5('" + TxtContraseña.Text + "'), 'md5',' " + Convert.ToInt16(txtTiposUsuario) + "','" + txtNombresUsuarios.Text + "','" + txtApellidosUsuario.Text + "';'" + Convert.ToDateTime(dataTFNacimiento.Value) + "','" + Convert.ToInt16(txtNumeroUsuario) + "','" + txtCorreoUsuario.Text + "','" + rtxtRedSocialUsuario.Text + "','" + rtxtDireccionUsuario.Text + "');";

Ahí está la línea de código completa.

Gabriel Hernández
  • 179
  • 1
  • 5
  • 17

2 Answers2

2

Puedes darte formato deseado mediante toString , ese valor le enviarías a la consulta directamente.

string fecha = dataTFNacimiento.Value.ToString("yyyyMMdd");
DarkFenix
  • 446
  • 1
  • 5
  • 14
  • Así estuve leyendo, gracias, Hay muchas funciones de artilugios con los cuales revertir un formato o "personalizar" uno propio. Por ejemplo, he estado ocupando las funcioines Subtring y Split. – Gabriel Hernández Nov 06 '16 at 08:08
2

El problema aquí es que estás concatenando los valores directamente en tu insert. Esto no es una buena costumbre por diferentes razones.

Una razón que se oye a menudo, pero siempre es bueno repetirlo, es que te expone a la inyección SQL.

Otra razón, es que te obliga a manipular los valores como strings, aun cuando no tiene sentido de hacerlo. Y ese es el caso aquí. Tu valor es una fecha, por lo que no tiene sentido que tengas que preocuparte de formatearlo correctamente para insertarlo en un campo fecha en tu base de datos (asumo que el campo en tu base de datos es de tipo date. Si no, tal vez tengas otro problema allí también).

La manera correcta de insertar una fecha proveniente de un DataTimePicker es por medio de usar parámetros.

Como no has descrito tu tabla, permiteme darte un ejemplo simplificado.

Asumiendo que tienes una table definida de esta manera:

create table tbl (
    dt date
);

El insert en esta tabla desde C# usando una fecha que viene de un DataTimePicker se parecería a lo siguiente:

string insertText = "insert into tbl (dt) values (@dt)";
using (var cmd = new MySqlCommand(insertText, conn))
{
    cmd.Parameters.AddWithValue("@dt", dateTimePicker1.Value);
    cmd.ExecuteNonQuery();
}

Como puedes ver, por usar un parámetro, puedo pasar la fecha directamente de dateTimePicker1.Value sin tener que preocuparme de formatear un string.

Lo ideal sería que uses parámetros con los demás valores de tu insert también.

Referencia útil: Working with Parameters.

sstan
  • 16,591
  • 2
  • 21
  • 45