[英]Reading XML file into Database
将XML文件读入数据库时遇到问题。 我将数据库放在VS项目中的HD上。 我不知道如何将XML文件中的值放入数据库。 我几乎掌握了这个要诀,但是我错过了一些东西。 因此,如果有人可以解释我的代码中缺少的内容,我将不胜感激。
我编写XML文件的代码:
try
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Planeter.mdf;Integrated Security=True");
StreamWriter outputFile = File.CreateText("min_XML2.xml");
SqlDataAdapter adapter = new SqlDataAdapter("select * from Planet", con);
DataSet ds = new DataSet("Planeter");
adapter.Fill(ds, "Planet");
ds.WriteXml(outputFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
到目前为止,我的代码用于读取XML文件:
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Planeter.mdf;Integrated Security=True");
con.Open();
StreamReader inputFile = File.OpenText("min_XML2.xml");
DataSet ds = new DataSet();
ds.ReadXml(inputFile);
DataTable dt = ds.Tables["Planet"];
dt.Rows.Add("value1","value2", "value3?"); //??Adding row?? Stuck...
con.Close();
它在dt.Rows.Add
我卡住了。 我想将XML文件中的每个值放入数据库。 我在站点上编写XML文件时遇到了“麻烦”,所以我不知道它是否最好。 但是我真的不明白最后一行代码中的值应该做什么或它们是什么。 我的数据库中的列名是Namn
, Dygnslangd
和Arslangd
。
这是我的XML文件的样子:
<?xml version="1.0"?> <Planeter> <Planet> <Namn>asd</Namn> <Dygnslangd>33</Dygnslangd> <Arslangd>33</Arslangd> </Planet> <Planet> <Namn>Jorden</Namn> <Dygnslangd>24</Dygnslangd> <Arslangd>365</Arslangd> </Planet> <Planet> <Namn>Mars</Namn> <Dygnslangd>24</Dygnslangd> <Arslangd>687</Arslangd> </Planet> <Planet> <Namn>Merkurius</Namn> <Dygnslangd>58</Dygnslangd> <Arslangd>88</Arslangd> </Planet> <Planet> <Namn>Venus</Namn> <Dygnslangd>244</Dygnslangd> <Arslangd>224</Arslangd> </Planet> </Planeter>
最好的祝福。
您应该可以使用以下方法执行此操作:
SqlCommand
,每个行星执行一次,并将数据插入SQL Server数据库表中。 在此处尝试以下代码:
// C# classes for the XML structure
using System.Xml.Serialization;
namespace PlaneterXml
{
[XmlRoot(Namespace = "", IsNullable = false)]
public partial class Planeter
{
private Planet[] itemsField;
[XmlElement("Planet", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public Planet[] Items
{
get { return this.itemsField; }
set { this.itemsField = value; }
}
}
[XmlType(AnonymousType = true)]
public partial class Planet
{
public string Namn { get; set; }
public int Dygnslangd { get; set; }
public int Arslangd { get; set; }
}
}
// C# code to read the XML (deserialize it) and then insert
// the planets read from the file into the database table
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace PlaneterXml
{
class Program
{
static void Main(string[] args)
{
// adapt to *your* file name - possibly put this in a
// configuration file, or pick the file interactively
string fileName = @"C:\tmp\planeter.xml";
Planeter allPlanets = null;
using (FileStream fstm = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
// create XML serializer for the "Planeter" type
XmlSerializer planetSerializer = new XmlSerializer(typeof(Planeter));
// deserialize the XML into a "Planeter" object
allPlanets = planetSerializer.Deserialize(fstm) as Planeter;
}
// Define connection string and insert query
// connection string would typically come from a config file
string connectionString = @"server=.;database=test;integrated security=SSPI;";
string insertQuery = @"INSERT INTO dbo.Planets(Namn, Dygnslangd, Arslangd) VALUES(@Namn, @Dygnslangd, @Arslangd);";
// create SqlConnection and SqlCommand to insert
using (SqlConnection conn =new SqlConnection(connectionString))
using (SqlCommand insertCmd = new SqlCommand(insertQuery, conn))
{
// define parameters
insertCmd.Parameters.Add("@Namn", SqlDbType.VarChar, 100);
insertCmd.Parameters.Add("@Dygnslangd", SqlDbType.Int);
insertCmd.Parameters.Add("@Arslangd", SqlDbType.Int);
// open connection, loop over planets, execute query
conn.Open();
foreach (Planet p in allPlanets.Items)
{
// set parameter values
insertCmd.Parameters["@Namn"].Value = p.Namn;
insertCmd.Parameters["@Dygnslangd"].Value = p.Dygnslangd;
insertCmd.Parameters["@Arslangd"].Value = p.Arslangd;
insertCmd.ExecuteNonQuery();
}
// close connection
conn.Close();
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.