1

これらの日付を Excel スプレッドシートからデータベースに入力しようとしています。C# でスプレッドシートから日付を読み取ることができましたが、SQL コマンドでこれらの行をデータベースに挿入できなくなりました。データベースがそれを除外できるように、これを正しくフォーマットするのに助けが必要です。

デバッグ モードでは、日付は'UpdateDate '3/28/2013 12: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;
}
4

2 に答える 2

4

パラメータ化されたクエリは、より明確で、高速で、安全です。コードが読みやすくなるため、より明確になります。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);
于 2013-10-25T20:39:57.693 に答える
1

を設定するときに等号が必要なのではないでしょUpdateDateうか? いえ

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

DateTimeまた、SQL が期待するものに適合するようにオブジェクトをフォーマットする必要がある場合もあります。こちらとこちらをご覧ください

于 2013-10-25T20:37:26.867 に答える