【问题标题】:Converting a C# DateTime to an SQL DateTime in input into the database在数据库的输入中将 C# DateTime 转换为 SQL DateTime
【发布时间】:2013-10-25 20:32:49
【问题描述】:

我正在尝试将这些日期从 Excel 电子表格输入数据库。我已经能够让 C# 从电子表格中读取日期,但现在 SQL 命令不允许我将这些行插入数据库。我需要一些帮助才能正确格式化数据库以排除它。

在调试模式下,这是日期:'UpdateDate '3/28/2013 12:00:00 AM',这就是它在 excel 表中的样子:3 /28/2013 下午 2:04:49。以下是我的代码:

private static bool SentenceMeasures_Update(DataRow dr)
{
   bool inserted = false;
   DateTime dt;
   Database pbkDB = DatabaseFactory.CreateDatabase("PbKConnectionString");

   try
   {
      ChargeCode = dr["ChargeCode"].ToString().Trim();
      MeasureCode = dr["MeasureCode"].ToString().Trim();
      UpdateUserId = String.IsNullOrEmpty(dr["UpdateUserId"].ToString().Trim()) ? "KSCONV" : dr["UpdateUserId"].ToString().Trim();
      UpdateDate = DateTime.TryParse(dr["UpdateDate"].ToString(), out dt) ? dt : DateTime.Now;
      DbCommand dbCommand = pbkDB.GetSqlStringCommand(string.Format(@"Update tblCtStateChargeSentenceMeasures set  MeasureCode = '{1}', UpdateUserId = '{2}', UpdateDate '{3}' where ChargeCode = '{0}')", ChargeCode, MeasureCode, UpdateUserId, UpdateDate));

      pbkDB.ExecuteNonQuery(dbCommand);
      inserted = true;
   }

   catch (Exception ex)
   {
      Console.WriteLine(ex.ToString());
   }
   return inserted;
}

【问题讨论】:

  • 你的数据库是什么?数据库中的日期字段是什么类型的?是日期、时间戳等吗?
  • 以上产生了什么错误?
  • 我遇到了一个 SQL 错误。第一个答案解决了我的问题。谢谢大家。
  • @Katherine 我对以下答案的评论很好,请继续检查它以解决您的问题。欢迎来到堆栈溢出! ;)

标签: c# sql datetime


【解决方案1】:

参数化查询更清晰、更快、更安全。更清晰,因为代码更容易阅读;更快,因为 SQL 将重用 query execution plan;更安全,因为它可以防止SQL injection。以下是将您的代码重构为参数化查询:

DbCommand dbCommand = pbkDB.GetSqlStringCommand(
    @"Update tblCtStateChargeSentenceMeasures set (MeasureCode = @MeasureCode 
    , UpdateUserId = @UpdateUserId
    , UpdateDate = @UpdateDate)
    where ChargeCode = @ChargeCode");
dcCommand.Parameter.Add("ChargeCode",ChargeCode);
dcCommand.Parameter.Add("MeasureCode",MeasureCode);
dcCommand.Parameter.Add("UpdateUserId",UpdateUserId);
dcCommand.Parameter.Add("UpdateDate",UpdateDate);

pbkDB.ExecuteNonQuery(dbCommand);

【讨论】:

    【解决方案2】:

    设置UpdateDate 时不应该只需要一个等号吗?即

    ... UpdateDate = '{3}' where ChargeCode = '{0}')", ...
                   ^            
    

    您可能还需要格式化 DateTime 对象以适应 SQL 的期望。见herehere

    【讨论】:

    • @Katherine 没问题
    • @Katherine 如果这回答了您的问题,您应该使用问题左侧的复选标记来表示。 :)
    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多