2014-01-06 76 views
1

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

<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数据库之前验证内容。你能告诉我我应该追求哪种方法吗?

回答

0

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

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

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

Deserialisation在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上今晚是否有帮助