在C#中将数据行添加到XML表

时间:2015-09-17 04:01:28

标签: c# xml serialization

我正试图弄清楚如何使用C#存储数据。

我是C#数据存储的新手,过去曾使用PHP和MySQL来做这类事情。在做了一些研究后,似乎使用XML序列化是可行的方法,但我不太确定所有的细节。

到目前为止,我已经创建了包含多个列的表:

private void SerializeDataSet()
{
    XmlSerializer ser = new XmlSerializer(typeof(DataSet));

    // Creates a DataSet for user info
    DataSet vault = new DataSet("vault");
    DataTable table_users = new DataTable("users");
    DataColumn last_name = new DataColumn("last_name");
    DataColumn first_name = new DataColumn("first_name");
    DataColumn birthdate = new DataColumn("birthdate");
    DataColumn role = new DataColumn("role");
    table_users.Columns.Add(last_name);
    table_users.Columns.Add(first_name);
    table_users.Columns.Add(birthdate);
    table_users.Columns.Add(role);

    // adds table
    vault.Tables.Add(table_users);

    // serialized table
    string filename = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Resources) + "Vault_Tec_storage";
    TextWriter writer = new StreamWriter(filename);
    ser.Serialize(writer, vault);
    writer.Close();
}

现在我无法弄清楚该怎么做,实际上是将数据添加到该表中。例如,如果我想要一个方法来处理John Doe的用户注册,出生于1975年10月15日,角色为“0”,我将如何去做呢?

2 个答案:

答案 0 :(得分:1)

您可能想要尝试DataSet ReadXml()

用法是这样的:

using (StreamReader reader = new StreamReader("C://filepath.xml"))
{
     byte[] fullByte = Encoding.ASCII.GetBytes(reader.ReadToEnd());
     DataSet dataSet = new DataSet();
     MemoryStream mStream = new MemoryStream(fullByte);
     mStream.Position = 0;
     dataSet.ReadXml(mStream);

     /*
     while DEBUGGING, you'll notice here that your `dataSet` is now populated by
     collection of tables. These table came for each sub nodes followed with an
     internal ID as relationship between nodes. From here, you may add values in 
     your table like the usage below.
     */

     // ex. if Table is like this
     // Name | Age
     // John | 09/10/2015
     DataTable dt = dataSet.Tables[0];

     dt.Rows.Add(
       // array of objects
       new object[] { "New John", "09/11/2015" }     
     );

     //OR

     DataRow dr = dt.NewRow();
     dr["Name"] = "New John";
     dr["Age"] = "09/11/2015";
     dt.Rows.Add(dr);
} 

希望这会有所帮助,如果你有一个特定的案例,你正在努力,请在评论部分下面,我们会帮助你。

谢谢!

答案 1 :(得分:1)

试试这个

private void SerializeDataSet()
        {
            // Creates a DataSet for user info
            DataSet vault = new DataSet("vault");
            DataTable table_users = new DataTable("users");
            table_users.Columns.Add("last_name", typeof(string));
            table_users.Columns.Add("first_name", typeof(string));
            table_users.Columns.Add("birthdate", typeof(DateTime));
            table_users.Columns.Add("role", typeof(int));

            // adds table
            vault.Tables.Add(table_users);
            table_users.Rows.Add(new object[] { "Doe", "John", DateTime.Parse("10/15/1975"), 0 });

            // serialized table
            string filename = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Resources) + "Vault_Tec_storage";
            vault.WriteXml(filename);
        }