C# を使用して比較的複雑な XML ファイルを解析し、選択したデータを SQL Server '08 データベースに格納しようとしています。これは、XML ファイルから抽出しようとしているものです。
<educationSystem>
<school>
<name>Primary School</name>
<students>
<student id="123456789">
<name>Steve Jobs</name>
<other elements>More Data</other elements>
</student>
<student id="987654">
<name>Jony Ive</name>
<otherElements>More Data</otherElements>
</student>
</students>
</school>
<school>
<name>High School</name>
<students>
<student id="123456">
<name>Bill Gates</name>
<other elements>More Data</other elements>
</student>
<student id="987654">
<name>Steve Ballmer</name>
<otherElements>More Data</otherElements>
</student>
</students>
</school>
</educationSystem>
[質問する前に、いいえ、これは学校の課題ではありません。学校/学生を例として使用しています。オリジナルはよりデリケートなためです。]
(XDocument/XElement を使用して) XML ファイルを解析し、すべての学校名、学生名、および学生 ID のリストを取得できますが、これがデータベースに追加されると、Bill Gates
学生のエントリが 1 秒未満になります。学校。それはすべて行ごとです。
私は、これを達成する方法を探しています:
Foreach school
put it's name into an XElement
foreach student
grab the name and id put into XElements
Grab next school and repeat
これを達成するにはLinqが最善の方法だと思いますが、プロセスを開始する方法に問題があります。誰かが私を正しい方向に向けることができますか?
編集:データをデータベースに保存するために現在使用しているコードは次のとおりです。一度にリストを処理します (したがって、物事は本来あるべきように関連していません)。また、SQL も整理します。
private void saveToDatabase (List<XElement> currentSet, String dataName)
{
SqlConnection connection = null;
try
{
string connectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString + "; Asynchronous Processing=true";
connection = new SqlConnection(connectionString);
connection.Open();
foreach (XElement node in currentSet)
{
SqlCommand sqlCmd = new SqlCommand("INSERT INTO dbo.DatabaseName (" + dataName + ") VALUES ('" + node.Value + "')", connection);
sqlCmd.ExecuteNonQuery();
}
}