将输入到数据库中的 C# 日期时间转换为 SQL 日期时间
本文关键字:时间 日期 转换 SQL 输入 数据库 | 更新日期: 2023-09-27 18:36:58
我正在尝试将这些日期从 excel 电子表格输入到数据库中。我已经能够让 C# 从电子表格中读取日期,但现在 SQL 命令不允许我将这些行插入到数据库中。我需要一些帮助来正确格式化数据库,以使其除外。
在调试模式下,这是日期:"更新日期'3/28/201312:00:00 AM',这是它在 excel 工作表中的样子:3/28/2013 2:04:49 PM。 下面是我的代码:
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 会重用查询执行计划;并且更安全,因为它可以防止SQL注入。下面是重构为参数化查询的代码:
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);
设置UpdateDate
时,您不应该只需要一个等于吗? 即
... UpdateDate = '{3}' where ChargeCode = '{0}')", ...
^
您可能还需要设置DateTime
对象的格式,以适应 SQL 的期望。看这里和这里