2011-12-27 10 views
2

私は日付を持っていると私は、クエリ持っている:あなたは日付がロシアの形式になって見ることができるようにのDateTime sqlliteで

INSERT INTO stats_project_funds(id_project, id_funds, month,stake, stake_in_units, stake_in_percent, profit, profit_in_units, picks, hitrate, won, draw, lost) 
VALUES(1, 5, strftime("%Y-%m",'27.12.2011'), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 

を。私のプログラムは、ヨーロッパ言語のローカリゼーションで書かれており、日付形式は27-12-2011です。このクエリはすべてのローカリゼーション用に変更する必要がありますか?このデータベースのこのフィールドはデータ型です。より良い解決策は、それをvarcharに変更し、文字列値を挿入することでしょうか?フィールドには、年と月のみが格納されます。

私のクエリは次のようになります。

DateTime newMonth = DateTime.Parse(month); 
      StringBuilder query = new StringBuilder(); 
      query.AppendFormat(" INSERT INTO stats_project_funds(id_project, id_funds, month,stake, stake_in_units, " 
       + " stake_in_percent, profit, profit_in_units, picks, hitrate, won, draw, lost) " 
       + " VALUES({0}, {1}, strftime(\"%Y-%m\",'{2}'), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ", idProject, idFunds, newMonth.Date.ToShortDateString()); 
      return query.ToString(); 

おかげ

+3

通常のDateTimeで保存して、必要な日付にフォーマットしてください。なぜあなたはあなたのフィールドタイプとしてDateTimeを使用しないのか不思議です。 – MethodMan

+0

これは通常のDateTimeでフォーマットはヨーロッパ言語ですが、これはstrftime(\ "%Y-%m \"、 '{2}')ロシア語版ではstrftime(\ "%Y.%m \"、 '{2}')である必要があります。 – Robert

+0

DateTimeは**フォーマットを持っていません。私は単純に任意の書式設定の問題をアプリケーション層に延期し、DBに未処理の値を処理させます(現在の回答ごとに型付きパラメータを使用)。 –

答えて

3
私はパラメータの代わりに文字列ビルダを使用し

、それははるかに、きれいに安全で低エラーが発生しやすくなります。こうすることで、日付の形式について心配する必要がなくなり、これがパラメータを使用して作業する好ましい方法です。

IDbCommand db = 
    new SqlCommand("insert into table (myDateField) values (@myDateParam)"); 
db.Parameters.Add(new SqlParameter("@myDateParam", DateTime.Now)); 
+0

newMonth.Date.ToString( "yyyy-MM"、CultureInfo.CurrentCulture)worksすべての国で:) – Robert

関連する問題