2

データベースに挿入するdd/MM/yyyy形式に変換したい日付形式のテキストボックスがあります。yyyy-MM-dd

私は試した

Convert.DateTime/DateTime.ParseExact 

ただし、システムのデフォルトの日付形式が常に表示されます。

私はC#でそれを変換する他の方法を知りません...

4

5 に答える 5

13

データベースに挿入するために文字列変換するべきではありません。(このアプローチを推奨している他のすべての回答に驚いています。)

代わりに、パラメーター化された SQL を使用し、パラメーターのDateTime値を取得した値に設定する必要があります。いずれにせよ、SQL インジェクション攻撃を回避し、コードとデータを分離するために、パラメータ化された SQL を使用する必要があります。不必要な文字列変換 (それぞれが問題点になる可能性があります) を回避できるという事実は、もう 1 つの利点です。

あなたの質問のこの部分は、あなたが根本的な誤解をしていることを示唆しています:

Convert.DateTime/DateTime.ParseExact を使用すると、常にシステムの日付形式が得られます。

これらのメソッドはDateTime. Aには形式DateTimeありません。呼び出すと、現在のカルチャの既定の形式を取得するだけですが、それは値の一部ではありません。数字の場合と同様です。16 と 0x10 は同じ数字であり、10 進数か 16 進数かは「わかりません」。無意味な概念です。ToStringint

これらはすべて、差し迫った問題を超えて、型の観点からコード ベースをクリーンに保つことを目的としています。できるだけ多くの時間、データを最も適切な形式で保持し、そのデータが何を意味するのかを常に正確に理解する必要があります。通信のための他の型 (文字列など) への変換は、API/システムの境界でのみ行う必要があり、可能であればそこでも回避する必要があります (たとえば、この場合のようにパラメーター化された SQL を使用する)。

于 2012-08-24T05:58:04.287 に答える
3

多くの方法がありますが、パラメータ化された SQL を使用するほど便利で論理的な方法はありません。ウィキペディアのページはこちら!パラメータ化された SQL ステートメントの詳細については、このコーディング ホラーページにアクセスしてください。

于 2012-08-24T06:17:04.373 に答える
2

実際には変更する必要はありません。これは単なる表示形式ですが、内部の「DateTime」オブジェクトは同じままです。挿入方法に応じて、次を使用できます。

string dateValue = DateTime.Now.ToString("yyyy-MM-dd");

これをクエリ文字列に挿入します。

編集

しかし、Jon Skeet がコメントしたように、このように手動でクエリ文字列を作成することは決して行われるべきではありません。パラメータ化された SQL や NHibernate の利用などのよりクリーンなアプローチが最初の関心事です。

于 2012-08-24T05:57:14.170 に答える
-1

次のようにフォーマットできます。

string sDateTime = Convert.ToDateTime(txtTextBox.Text).ToString("yyyy-MM-dd");

編集

データベースに入力する情報を準備する際に、猫の皮を剥ぐ方法はたくさんあります。ここでの私の解決策はOPに直接答えますが、これを行うためのより良い方法があることを非常に認めています。

このページの Jon Skeet の投稿も読むことをお勧めします。彼は OP のアプローチに関して非常に有効な点をいくつか挙げています。

それが役立つことを願っています。

于 2012-08-24T05:57:29.330 に答える