繁体   English   中英

将XML文件读入数据库

[英]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文件时遇到了“麻烦”,所以我不知道它是否最好。 但是我真的不明白最后一行代码中的值应该做什么或它们是什么。 我的数据库中的列名是NamnDygnslangdArslangd

这是我的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> 

最好的祝福。

您应该可以使用以下方法执行此操作:

  • XML反序列化,将XML文件读入一个内存结构中,该结构保存行星
  • 一个简单,整齐的参数化ADO.NET 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM