我已经创建了一个名为SeedData.xml的xml文件。
<Root>
<User>
<UserID>1</UserID>
<UserName>Admin</UserName>
<FirstName>Admin</FirstName>
<LastName>Admin</LastName>
<ShortName>Admin</ShortName>
</User>
</Root>
我已经在web.config中包含了这样的路径。
<appSettings>
<add key="myFilePath" value="D:\XmlSample\Common\SeedData.xml"/>
</appSettings>
我需要将xml文件中的数据添加到数据库中。
我得到了xml的路径
string filePath = ConfigurationManager.AppSettings["myFilePath"];
但是如何从xml中提取值并保存在数据库中。我在谷歌中搜索了很多,但我无法找到解决方案。 请帮忙
答案 0 :(得分:1)
XML是一种基于通用标记的语言,非常容易跨应用程序传输和存储数据。 .Net技术是广泛支持的XML文件格式。 .Net Framework为XML格式的文件中的读取,写入和其他操作提供了类。此外,ADO.NET中的数据集使用XML格式作为其内部存储格式。
这里我们将使用SQL Insert Command将XML文件的值插入数据库表。这里的数据集使用XmlReader来读取XML文件的内容。使用XmlReader找到XML文件,并将XmlReader作为Dataset的参数传递。还使用connectionstring建立与数据库的连接。在将数据从XML文件获取到数据集之后,我们可以遍历数据集值并使用insert命令将值添加到数据库中的表。
试试这个
using System;
using System.Data;
using System.Windows.Forms;
using System.Xml;
using System.Data.SqlClient;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection connection;
SqlCommand command ;
SqlDataAdapter adpter = new SqlDataAdapter();
DataSet ds = new DataSet();
XmlReader xmlFile ;
string sql = null;
int ID = 0;
string Name = null;
double Price = 0;
connetionString = "Data Source=servername;Initial Catalog=databsename;User ID=username;Password=password";
connection = new SqlConnection(connetionString);
xmlFile = XmlReader.Create("Xmlfile.xml", new XmlReaderSettings());
ds.ReadXml(xmlFile);
int i = 0;
connection.Open();
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
ID = Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[0]);
Name = ds.Tables[0].Rows[i].ItemArray[1].ToString();
Price = Convert.ToDouble(ds.Tables[0].Rows[i].ItemArray[2]);
sql = "insert into tablenamevalues(" + ID + ",'" + Name + "'," + Price + ")";
command = new SqlCommand(sql, connection);
adpter.InsertCommand = command;
adpter.InsertCommand.ExecuteNonQuery();
}
connection.Close();
MessageBox.Show("Done .. ");
}
}
}