我希望通过 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
学生条目不到一秒学校。这一切都只是一行一行。
我正在寻找一种方法来实现这一目标:
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();
}
}