修正前のテーブルの内容をXMLデータとして保存し、ログテーブルに格納することで、履歴を退避する
Step1
DataSetをシリアライズしXML形式の文字列を作成する
Step2
文字列をログテーブルへ保存する(普通にInsert)
Step3
ログテーブルに格納されているXML形式の文字列をDataSetにデシリアライズする
【サンプルソース】
# テストデータ作成
[System.Data.DataTable]$dt = New-Object "System.Data.DataTable";
$dt.TableName = "dtMemo";
$dt.Columns.Add("col1",[string]);
$dt.Columns.Add("col2",[string]);
$dt.Columns.Add("col3",[string]);
$dt.Columns.Add("col4",[string]);
$dr = $dt.NewRow();
$dr["col1"]="sample1-1";
$dr["col2"]="sample1-2";
$dr["col3"]="sample1-3";
$dr["col4"]="sample1-4";
$dt.Rows.Add($dr);
$dr = $dt.NewRow();
$dr["col1"]="sample2-1";
$dr["col2"]="sample2-2";
$dr["col3"]="sample2-3";
$dr["col4"]="sample2-4";
$dt.Rows.Add($dr);
[System.Data.DataSet]$ds = New-Object "System.Data.DataSet";
$ds.Tables.Add($dt);
# XMLデータの取得
$strXML = $ds.GetXml() ;
# XMLの内容確認
Write-Host($strXML);
# 文字列のXMLを読み込んでDataSetを作成
[System.Data.DataSet]$dsFromXML = New-Object "System.Data.DataSet";
[System.Xml.XmlReaderSettings]$xmlSettings = New-Object "System.Xml.XmlReaderSettings";
$xmlSettings.Async = $true;
$sr = New-Object "System.IO.StringReader"$strXML;
$xmlDoc = [System.Xml.XmlReader]::Create($sr,$xmlSettings);
$dsFromXML.ReadXml($xmlDoc);
# 結果確認
$dsFromXML.GetXml();
[System.Data.DataTable]$dt = New-Object "System.Data.DataTable";
$dt.TableName = "dtMemo";
$dt.Columns.Add("col1",[string]);
$dt.Columns.Add("col2",[string]);
$dt.Columns.Add("col3",[string]);
$dt.Columns.Add("col4",[string]);
$dr = $dt.NewRow();
$dr["col1"]="sample1-1";
$dr["col2"]="sample1-2";
$dr["col3"]="sample1-3";
$dr["col4"]="sample1-4";
$dt.Rows.Add($dr);
$dr = $dt.NewRow();
$dr["col1"]="sample2-1";
$dr["col2"]="sample2-2";
$dr["col3"]="sample2-3";
$dr["col4"]="sample2-4";
$dt.Rows.Add($dr);
[System.Data.DataSet]$ds = New-Object "System.Data.DataSet";
$ds.Tables.Add($dt);
# XMLデータの取得
$strXML = $ds.GetXml() ;
# XMLの内容確認
Write-Host($strXML);
# 文字列のXMLを読み込んでDataSetを作成
[System.Data.DataSet]$dsFromXML = New-Object "System.Data.DataSet";
[System.Xml.XmlReaderSettings]$xmlSettings = New-Object "System.Xml.XmlReaderSettings";
$xmlSettings.Async = $true;
$sr = New-Object "System.IO.StringReader"$strXML;
$xmlDoc = [System.Xml.XmlReader]::Create($sr,$xmlSettings);
$dsFromXML.ReadXml($xmlDoc);
# 結果確認
$dsFromXML.GetXml();
0 件のコメント:
コメントを投稿