2011-01-08 10 views
1

日付時刻を文字列形式で保持するフィールドがAzureテーブルにあります。私はこれをDateTimeフィールドに置き換えて、文字列の値を変換したいと思います。これに最も近いアプローチは何ですか?私は、新しい列を作成することによって、これを行うと、更新ステートメントを実行したいSQLでAzureテーブルストレージの文字列フィールドをdatetimeフィールドに変換します。

...

答えて

1

私はこれを試していませんが、ここでは/やるべきことです。これはC#/ VB/etcスクリプトである必要があります。

  1. クラスの定義を変更して、datetime型の/ new/memberを含むようにします。
  2. linqクエリを実行してテーブルからすべての行をロードし、forループを実行します。これは、古い文字列変数に基づいて新しいdatetime変数を設定します。
  3. オブジェクトをテーブルに保存します。 //は現在、あなたのテーブルのストレージが再び
  4. ロードにクラス定義からテーブルからオブジェクトを古いフィールドを削除し、それらが汚れマーキングが、何もしてO/Wそれらを保存し、その変数
  5. の新旧定義とオブジェクトが含まれています。これは、テーブル内の直列化された構造体から古いメンバーを取り除くべきです。 新しいdatetimeフィールドに元の文字列変数の名前を使用させたい場合は、ステップ1から5までをもう一度実行します。今回は、1つのフィールドから別のフィールドにデータを移動します。唯一の違いは、変換をやり直す必要がないことです。

一般的に、これは完全なPITAであり、オブジェクトデータベースとストレージサービスのベーンの1つです。

+0

答えをありがとう - 私はPITAになることを期待していた:( –

0

Azureテーブルストレージクライアントは、ネイティブのDateTime(ではないのDateTimeOffset)を理解し、あなたは単純に検討する必要がありますSDKがあなたのために問題を処理させるようにします。そうでない場合は、DateTimeを文字列として表す最も良い方法は、「u」形式を使用して書かれ解析されたUTC値として明示的に格納して取得することです。

var dateAsString = myDateTime.ToString("u"); 
+0

マーク - 私がはっきりしていない場合は申し訳ありませんが、値はテーブルに文字列として保存されていて、新しいDateTime属性で保持したいと考えています。 SQLで私は新しい列を作成し、更新ステートメントを実行します... –

0

それがうまくいくかどうかはわかりませんが、あなたは「幸せな無知」を試みることができる:

実表ストアは、実際に(開発ファブリックが異なる場合があります)あなたのエンティティの形状を気にしません。エンティティプロパティをDateTimeに変更しますが、Setterテストでは値をDTに解析しない場合は値はDatetimeです。あなたは、単にエンティティをロードし、それらを再度保存するとうまくいけば、時間をかけて

private DateTime myDT 
public DateTime MyDT 
{ 
    get 
    { 
     return myDT; 
    } 
    set 
    { 
     DateTime = null; 
     if(value is DateTime) 
     { 
      myDT = value; 
     } 
     else 
     { 
      myDT = DateTime.Parse(value); 
     } 
    } 

} 

のようなものは、明示的またはバッチで、それは日時にそれらすべてを設定します。

関連する問題