[英]reading from XML file to Sql server table C#
我想将数据从XML文件读取到sql server表,如果所有点头都存在,我的代码可以正常工作,但是如果其中一个节点不存在,则显示错误,这是我的xml文件
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<student>
<rfidip>3000E2009150501900880530DE07</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
<timegetout>2013-04-09T00:55:59+03:00</timegetout>
</student>
<student>
<rfidip>3000E20075232318015114907CF6</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
<timegetout>2013-04-09T00:55:59+03:00</timegetout>
</student>
<student>
<rfidip>3000E20075232318015112409741</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
</student>
</DocumentElement>
这是我的代码,该代码读取XML并将数据插入到sql server表中
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:\\Users\\TOSHIBA\\Desktop\\student.XML");
XmlNodeList dataNodes = xmlDoc.SelectNodes("/DocumentElement/student");
foreach (XmlNode node in dataNodes)
{
rfidip = node.SelectSingleNode("rfidip").InnerText.ToString();
timegetin = (node.SelectSingleNode("timegetin").InnerText);
timegetout = node.SelectSingleNode("timegetout").InnerText;
sql = "insert into tripStudent (Student_ID,trip_number,time_getin,time_getout) values(@rfidip,@trip_number,@timegetin,@timegetout)";
//sql = "insert into students values(" + rfidip + ",'" + timegetin + "'," + timegetout + ")";
command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@rfidip", rfidip);
command.Parameters.AddWithValue("@trip_number",trip_number);
command.Parameters.AddWithValue("@timegetin", Convert.ToDateTime(timegetin));
command.Parameters.AddWithValue("@timegetout", Convert.ToDateTime(timegetout));
command.ExecuteNonQuery();
有谁能够帮助我...
为什么不只使用Entity Framework
来更新值,而不要使用带有XML解析的XDocument
呢?
string xml = @"<?xml version=""1.0"" standalone=""yes""?>
<DocumentElement>
<student>
<rfidip>3000E2009150501900880530DE07</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
<timegetout>2013-04-09T00:55:59+03:00</timegetout>
</student>
<student>
<rfidip>3000E20075232318015114907CF6</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
<timegetout>2013-04-09T00:55:59+03:00</timegetout>
</student>
<student>
<rfidip>3000E20075232318015112409741</rfidip>
<timegetin>2013-04-09T00:53:25+03:00</timegetin>
</student>
</DocumentElement>";
//use var xDoc = XDocument.Load(xmlPathGoesHere); if you using xml path
var xDoc = XDocument.Parse(xml);
var studentElements = xDoc.Descendants("student");
studentElements.ToList().ForEach(student => {
//Create you Insert Query here, see sample below how to get values
var rfid = student.Element("rfidip").Value;
var timeIn = student.Element("timegetin").Value;
var timeOut= string.Empty;
try {
timeOut = student.Element("timegetout").Value;
} catch {
//since you have no xml value on your time get out, I catch this line
}
});
请参阅下面的参考:
1.) 实体框架
2.) XDocument
如果元素不存在,则SelectSingleNode返回null,因此当您对null调用InnerText时,它将引发异常,因此您可以像这样更改代码:
rfidip = (node.SelectSingleNode("rfidip") != null)? node.SelectSingleNode("rfidip").InnerText.ToString(): string.Empty;
其他代码也一样,确保元素存在
希望这对您有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.