2016-09-29 22 views
4

日付を使用するC#でプログラムを作成しました。 SQL Serverテーブルから値を取得します。私はWindows 7を使用していて、プログラムはうまくいきました。私は、このコード行を持っていた:DateTimeをSQL ServerからC#DateTimeに変換できません

DateTime fechaOperacion = Convert.ToDateTime(reader["FechaOperacion"]); 

読者は24時間形式で日付を返したと私はDateTime変数にそれを変換することができました。

今私は、システムは、Windows 10にアップグレードしなかったし、コードの同じ行には、次のエラーがスローされます。

String was not recognized as a valid DateTime. there is an unknown word starting at index 20.

そして今、リーダー返す午前/〜午後フォーマットであり、インデックス20にはa.mまたはp.m.がある。コードの行を言い換え

  • :24時間形式

    に文化を変換

    1. Convert.ToDateTime(reader["FechaOperacion"], System.Globalization.CultureInfo.InvariantCulture)
    2. reader.GetDateTime(reader.GetOrdinal("FechaOperacion"));
  • は、私は次のことを試してみました

    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(1033); 
    

しかし、それのどれも動いていないようにみえ、私は何をする他に何かわかりません。

+0

以下のような変換を行うことができます「動作するようには思えない」を定義します。具体的には、独立して任意の形式の 'DATETIME'列を読み取るための正しい方法である' reader.GetDateTime(reader.GetOrdinal(「FechaOperacion」)) 'の結果は何ですか? –

+2

**正確には**読者["FechaOperacion"] 'が返っていますか? 'String'という言葉は、' 'SQL DateTime ''ではないことを意味します.SQLの' datetime'値は問題なく、解析する必要はありません。それでは、何ですか? –

+0

'FechaOperacion'がDATETIME列の場合、それは表示の問題のように聞こえます。 'var dateStr = fechaOperacion.ToString(" dd/MM/yyyy HH:mm:ss ");'を実行するとどうなりますか? 'dateStr'の値は何ですか? – Howwie

答えて

7

最終的には、日付/時刻をテキストデータ(つまり、何らかの種類の[n][var]char({max|n})、またはプッシュ:[n]text)として表す値が格納されています。これは複数の問題があります。

  • それはそれがリードし、それが
  • 正しく/効率的にフィルタリングすることができない正しく/効率的に
  • インデックスを作成することはできません、それは
  • 正しく/効率的にソートすることができません
  • より多くのスペースを取りますクライアントとサーバー間のエラーを解析するには
  • ローカリゼーションと国際化の問題が多々あります

必要なものはdatetime/date/time/etcの列です。これは、番号(文字列ではありません)として保存され、解析は不要で、変換の問題がなくても確実に動作します。


注:それあなたがそれを正しく保存するが、あなたのクエリのselect文内それをフォーマットしていることが考えられます。その場合、ちょうどはしないでください;生の日時を返し、受信側のクライアントがそれをどのように表示するか心配してください。

0

あなたの実際の形式に応じて、あなたは、適切な形式のリストを定義し、

string[] mfs = { "MM/dd/yyyy HH:mm:ss", "MM/dd/yyyy h:mm:ss tt"}; 

var dat = DateTime.ParseExact("04/23/1945 8:45:22 PM", mfs, 
       System.Globalization.CultureInfo.InvariantCulture, 
       System.Globalization.DateTimeStyles.None); 
関連する問題