1

自動フィールド マッピング (MS Access または SQL サーバー 2012) を使用して、XML ファイルをすばやく読み取り、ディスク上の厳密に型指定されたテーブルに保存する方法。

アイデア/要望:

  1. c# 4.0、.NET 4.0、SQL Server 2012、MS Access を使用
  2. XML からテーブルへの自動フィールド マッピング (フィールド名とフィールド タイプ) に基づいて xml データをインポートします。私はXSDを持っています。新しい行を追加するだけで、キーの一致はありません。
  3. 必要に応じてフィールドと型のマッピングをオーバーライドできます (ハード コードするか、テンプレート/マッピング ファイルを使用するかはまだ決めていないので、再コンパイルする必要はありません)
  4. 必要に応じてフィールド マッピングを複製できます (1 つの xml フィールドから多数のテーブル フィールドへ)
  5. コード/セットアップの保守性が低いことは、インポート/変換の速度よりも重要ですが、必要に応じてすべてのオプションを知っておくと便利です
  6. サードパーティのソリューションが受け入れられる場合があります

この方法は十分に高速ですか、それともより良い方法がありますか?

ステップ 1: xml をクラスに読み込みます (C# クラスは XSD.exe ツールから自動生成されました)。

ser = new XmlSerializer(typeof(MyTypeData));
MyTypeData data;
using (XmlReader reader = XmlReader.Create(XMLFullPath))
{
  data = (MyTypeData)ser.Deserialize(reader);
}

ステップ 2: クラスを厳密に型指定された DataSet DataTable (メモリ内テーブル) にジェネリックを使用して保存します (以下の方法のように)

public static DataTable CreateEmptyDataTable(MyTypeData data)
// Creates empty DataTable
{
    DataTable dt = new DataTable();

    foreach (PropertyInfo info in data.GetProperties())
    {
        dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));   
    }

    return dt;
}

手順 3: DataTable フィールド名が同じフィールド タイプの XML 名と同じディスク上のテーブルにデータを入力します。テーブルにない xml 要素名をスキップします。新しい行を追加するだけで、今のところキーの一致について心配する必要はありません。キーの一致に基づく更新行は、後で追加できます。

ステップ 4: カスタム ソースを dest フィールド マッピングに追加する: (方法 - 最善の方法は?)

4

1 に答える 1

1

xml ファイルの xsd ファイルがある場合は、codeplex プロジェクトである xsd2code を試してください。ここ を参照してください。これにより、Xsd 形式に基づいてコード内のクラスが作成されます。

私にとっては、これにより問題がほとんどなく、非常に簡単に xml コードを作成することができました。xml スキームが変更されたら、コードを更新して新しいクラスを生成するだけです。

とても素敵できちんとしていますが、これはもちろん個人的な好みです。

于 2012-12-20T16:19:40.730 に答える