Reputation: 690
In C#, I want to write an update query with smalldatetime
columns, I have seen several posts on Stackoverflow but I didn't find one to solve the error:
Conversion failed when converting character string to smalldatetime data type.
I have a table RESERVAS
, with 3 columns ID_RESERVA
(int
), LLEGADA
(smalldatetime
), SALIDA
(smalldatetime
)
The code:
string strQuery = "UPDATE " + DB_TABLENAME + " SET " +
"LLEGADA = CONVERT(smalldatetime, '@LLEGADA', 126), " +
"SALIDA = CONVERT(smalldatetime, '@SALIDA', 126) " +
"WHERE ID_RESERVA = @ID_RESERVA";
SqlCommand cmd = new SqlCommand(strQuery, con); // con = SqlConnection
cmd.Parameters.Add("@ID_RESERVA", SqlDbType.Int);
cmd.Parameters.Add("@LLEGADA", SqlDbType.SmallDateTime);
cmd.Parameters.Add("@SALIDA", SqlDbType.SmallDateTime);
cmd.Parameters["@ID_RESERVA"].Value = Convert.ToInt32(stringWithIdReserva);
cmd.Parameters["@LLEGADA"].Value = stringWithLLegada.Replace(" ", "T"); //Real string value: "2015-03-30 00:00:00"
cmd.Parameters["@SALIDA"].Value = stringWithSalida.InnerText.Replace(" ", "T"); //Real string value: "2015-04-01 00:00:00"
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
Upvotes: 0
Views: 1766
Reputation: 33581
That is because you have wrapped your parameters with single tick marks. The way you have it coded it is trying to parse the string literals instead of the values in your parameters.
string strQuery = "UPDATE " + DB_TABLENAME + " SET " +
"LLEGADA = CONVERT(smalldatetime, @LLEGADA, 126), " +
"SALIDA = CONVERT(smalldatetime, @SALIDA, 126) " +
"WHERE ID_RESERVA = @ID_RESERVA";
SqlCommand cmd = new SqlCommand(strQuery, con); // con = SqlConnection
cmd.Parameters.Add("@ID_RESERVA", SqlDbType.Int);
cmd.Parameters.Add("@LLEGADA", SqlDbType.SmallDateTime);
cmd.Parameters.Add("@SALIDA", SqlDbType.SmallDateTime);
cmd.Parameters["@ID_RESERVA"].Value = Convert.ToInt32(stringWithIdReserva);
cmd.Parameters["@LLEGADA"].Value = stringWithLLegada.Replace(" ", "T"); //Real string value: "2015-03-30 00:00:00"
cmd.Parameters["@SALIDA"].Value = stringWithSalida.InnerText.Replace(" ", "T"); //Real string value: "2015-04-01 00:00:00"
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
Upvotes: 4