0

本が期限切れになった場合に罰金を計算するコマンドを作成しています。これは私のコードです

if (duedate.Value < DateTime.Now)
{
    cmd.CommandText = ("UPDATE Penalty SET Penalty = '"+ (dateTimePicker1.Text - duedate.Value)*50 +"' WHERE Title = '" + textBox3.Text + "'");
    ...
}

エラーがあるため、このコードは実行されていません(dateTimePicker1.Text - duedate.Value)

4

4 に答える 4

2

クエリを構成するエレガントな方法は、パラメータ化されたクエリです: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

擬似コード:

d1 = compute the Penalty value

次に、コマンドを作成します

cmd.CommandText = "UPDATE Penalty SET Penalty = @d1 WHERE Title = @d2";
cmd.Parameters.Add ("@d1", SqlDbType.DateTime).Value = d1;
于 2013-09-14T19:26:08.197 に答える
0

イッ!エガズ!ホーリータイプのミスマッチバットマン!

  • SQL クエリをパラメータ化しないと、SQL インジェクション攻撃の餌食になります!
  • 文字列から日付を減算しようとしないでください。それは無意味です。
  • で計算しないでくださいDateTime.Nowその理由をここで読んでください
  • をハードコーディングしないでください50。これが罰金の 1 日あたりの金額だと思います。
    • 必要に応じて後で調整できるように、変数に渡す必要があります。
    • 最初に丸一日取得する必要があります。
于 2013-09-14T19:30:02.177 に答える
0

この作品は、最初に内側の値をキャスト/変換してから、最終的な外側のキャストを減算します。

datetime にキャスト (datetime にキャスト (dateTimePicker1.Text) - datetime にキャスト (duedate.Value))*50

于 2013-09-14T19:41:42.630 に答える