【问题标题】:want to import data from XML to SQLite database想要将数据从 XML 导入 SQLite 数据库
【发布时间】:2014-01-23 14:55:31
【问题描述】:

我已经在 c# 中从我的 SQLite 数据库生成(导出)了一个 XML。现在,我需要将这些数据从 XML 导入到一个空的 sqlite 数据库。我还需要在将数据插入表时验证内容。我从数据库生成的 xml 是 -

<root>
    <name1>
        <names>
           <id>5</id>
           <class>space</class>
           <from>Germany</from>
           <to>France</to>
           <through>
              <via>
                   <id>7</id>
                   <route>Vienna<route>
               </via>
           </through>           
        </names>
        <mynames3>Black</mynames3>
        <mynames4>Hawkins</mynames4>
    </name1>
    <name2>
      <newNames>
          <id>8</id>
          <path>Road</path>
          <dest>USA</dest>
          <through>
              <route1>
                  <id>5</id>
                  <naviagte>Britain</naviagte>
                  <naviagte2>Holland</naviagte2>
                  <naviagting2>
                      <naviagtes2>
                            <naviagte5>France</naviagte5>
                            <naviagte6>US</naviagte6>
                            <naviagte7>Canada</naviagte7>
                       <naviagtes2>
                  </naviagting2>
                  <naviagte11>Russia</naviagte11>
                  <naviagte12>Poland</naviagte12>
              </route1>
              <route1>
                  <id>2</id>
                  <naviagte>Canada</naviagte>
              </route1>
          </through>              
      </newNames>
    </name2>
    <name3>H2V3</name3>
    <name4>H5V8</name4>
</root>

你能给我任何建议吗?我正在尝试以下方法。

SqliteConnection sqlCon = new SqliteConnection("Data Source=" + dataPath + "/Empty.db3");
            sqlCon.Open();
            SqliteCommand sqlCmd = new SqliteCommand(sqlCon);

            DataSet ds = new DataSet();
            ds.ReadXml(Path.Combine(syncPath, tableName + "_4.xml"), XmlReadMode.ReadSchema);
            foreach(DataTable dt in ds.Tables)
            {
                //Get field names
                string sqlString = "INSERT into " + tableName + " (";
                string valString = "";
                var sqlParams = new string[dt.Rows[0].ItemArray.Count()];
                int count = 0;
                foreach(DataColumn dc in dt.Columns)
                {
                    sqlString += dc.ColumnName + ", ";
                    valString += "@" + dc.ColumnName + ", ";
                    sqlParams[count] = "@" + dc.ColumnName;
                    count++;
                }
                valString = valString.Substring(0, valString.Length - 2);
                sqlString = sqlString.Substring(0, sqlString.Length - 2) + ") VALUES (" + valString + ")";

                sqlCmd.CommandText = sqlString;
                foreach(DataRow dr in dt.Rows)
                {
                    for (int i = 0; i < dr.ItemArray.Count(); i++) 
                    {
                        sqlCmd.Parameters.AddWithValue(sqlParams[i], dr.ItemArray[i] ?? DBNull.Value);
                    }

                    sqlCmd.ExecuteNonQuery();
                }
            }  

在将数据插入空的 SQLite 数据库之前,我需要验证内容。你能告诉我我应该采用哪种方法吗?

【问题讨论】:

    标签: c# xml sqlite


    【解决方案1】:

    如果有帮助,首先使用 XML2CSharp 网站生成 C# 类。您将反序列化到这个生成的类中。

    接下来创建您需要将反序列化数据存储到其中的类。将这些类创建为表。

    最后,您(几乎)将反序列化的数据复制到您的 SQLite 容器类中,然后存储这些类。

    反序列化在 4 行中执行...

    public static List<Jobs> JobData = new List<Jobs>();
    
    var s = new XmlSerializer(typeof(Jobs));
    var r = new StreamReader(xmlFilename);
    JobData.Add((Jobs)s.Deserialize(r));
    r.Close();
    

    如果有帮助,我今晚会在 github 上发布一些东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多