在 SQL Server 中更新表时出错:将字符串转换为 smalldatetime 数据类型时转换失败



在 C# 中,我想编写一个包含 smalldatetime 列的更新查询,我在 Stackoverflow 上看到了几篇帖子,但我没有找到一个来解决错误:

将字符串转换为小日期时间数据类型时转换失败。

我有一个表格RESERVAS,有 3 列ID_RESERVAint ), LLEGADAsmalldatetime ), SALIDAsmalldatetime

代码:

 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);
  }

这是因为您用单个刻度线包装了参数。你对它进行编码的方式是尝试解析字符串文字而不是参数中的值。

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);
  }

最新更新