none
日付の書き込み RRS feed

  • 質問

  • お世話になります。vb2008です。
    これまではSQLServerに日付を書き込む処理をデータテーブルを使用して
    newrecord.regist_date = Now
    と書いて問題なく処理してました。
    今回直接SQL文で書き込もうと下記の方法で書いてみていますが、日付を正確に書き込めません。
     command.CommandText = "UPDATE article_management SET receipt_date = " & txtHiduke.Text & " WHERE ID = " & bango
     command.ExecuteNonQuery()

    txtHiduke.Textに 2009/05/28  とすると 1900/01/15 というデータを書き込んでます。
    2009/05/28 0:00:00  とやってみると書き込み処理自体がエラーになります。

    receipt_dateはdatetime型です。txtHiduke.Textは確認のために使用しているだけで、コードだけで今日の日付を書き込みたいのですが。
    よろしくお願いします。


    のぐちみずき
    2009年5月28日 1:48

回答

  •  command.CommandText = "UPDATE article_management SET receipt_date = " & txtHiduke.Text & " WHERE ID = " & bango
    このようなクエリを実行するのは止めましょう。
    SQLインジェクションの良い餌食にしかなりません。


    "UPDATE article_management SET receipt_date = @hiduke WHERE ID = @bango"
    として、

    @付きのパラメータは、SqlParameterを引き渡してあげるように変更しましょう。

    @hidukeをDataTime型できちんと設定すれば問題なく動作すると思います。
    2009年5月28日 2:09

すべての返信

  •  command.CommandText = "UPDATE article_management SET receipt_date = " & txtHiduke.Text & " WHERE ID = " & bango
    このようなクエリを実行するのは止めましょう。
    SQLインジェクションの良い餌食にしかなりません。


    "UPDATE article_management SET receipt_date = @hiduke WHERE ID = @bango"
    として、

    @付きのパラメータは、SqlParameterを引き渡してあげるように変更しましょう。

    @hidukeをDataTime型できちんと設定すれば問題なく動作すると思います。
    2009年5月28日 2:09
  • わかりました。@の使い方をわかっていませんでした。
    ありがとうございます。
    のぐちみずき
    2009年5月28日 2:46
  • SQLインジェクションの原因になることはGX999さんのご指摘どおりです。
    txtHiduke.Textに 2009/05/28  とすると 1900/01/15 というデータを書き込んでます。
    2009/05/28 = 14.35 と計算し、14.35で更新しにいくからです。ちなみに0は1900/01/01であり、それプラス14.35日になりますから、1900/01/15になります。(正確には1900/01/15 08:23:59.997)


    2009/05/28 0:00:00  とやってみると書き込み処理自体がエラーになります。
    2009/05/28と0:00:00の間に空白があるため、SQL文として成り立たないからです。

    上記いずれも日付を「'」でくくることにより解決されます。つまり、'2009/05/28'、および'2009/05/28 0:00:00'です。
    しかし、SQLインジェクションの原因になりますから、このようにSQL文を組み立てるのはやめましょう。くどいですが重要なことですので繰り返します。
    また、SQL Server2008をお使いでしたら、日付だけを扱えるDate型がありますので、そちらの方が良いでしょう。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月28日 3:20
    モデレータ
  • ありがとうございます。
    のぐちみずき
    2009年5月28日 4:06