自動フィールド マッピング (MS Access または SQL サーバー 2012) を使用して、XML ファイルをすばやく読み取り、ディスク上の厳密に型指定されたテーブルに保存する方法。
アイデア/要望:
- c# 4.0、.NET 4.0、SQL Server 2012、MS Access を使用
- XML からテーブルへの自動フィールド マッピング (フィールド名とフィールド タイプ) に基づいて xml データをインポートします。私はXSDを持っています。新しい行を追加するだけで、キーの一致はありません。
- 必要に応じてフィールドと型のマッピングをオーバーライドできます (ハード コードするか、テンプレート/マッピング ファイルを使用するかはまだ決めていないので、再コンパイルする必要はありません)
- 必要に応じてフィールド マッピングを複製できます (1 つの xml フィールドから多数のテーブル フィールドへ)
- コード/セットアップの保守性が低いことは、インポート/変換の速度よりも重要ですが、必要に応じてすべてのオプションを知っておくと便利です
- サードパーティのソリューションが受け入れられる場合があります
この方法は十分に高速ですか、それともより良い方法がありますか?
ステップ 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 フィールド マッピングに追加する: (方法 - 最善の方法は?)