欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#保存与读取DataTable信息到XML格式的方法

程序员文章站 2023-10-23 21:20:05
本文实例讲述了c#保存与读取datatable信息到xml格式的方法。分享给大家供大家参考。具体如下: 这里主要实现: 1.将datatable中的信息保存到xml中...

本文实例讲述了c#保存与读取datatable信息到xml格式的方法。分享给大家供大家参考。具体如下:

这里主要实现:

1.将datatable中的信息保存到xml中

2.将以上述格式在xml中保存的信息读取到datatable内

一、将datatable的内容写入到xml文件中

/// <summary>
/// 将datatable的内容写入到xml文件中
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="address">xml文件地址</param>
public static bool writetoxml(datatable dt, string address)
{
 try
 {
  //如果文件datatable.xml存在则直接删除
  if (file.exists(address))
  {
   file.delete(address);
  }
  xmltextwriter writer = 
   new xmltextwriter(address, encoding.getencoding("gbk"));
  writer.formatting = formatting.indented;
  //xml文档创建开始
  writer.writestartdocument();
  writer.writecomment("datatable: " + dt.tablename);
  writer.writestartelement("datatable"); //datatable开始
  writer.writeattributestring("tablename", dt.tablename);
  writer.writeattributestring("countofrows", dt.rows.count.tostring());
  writer.writeattributestring("countofcolumns", dt.columns.count.tostring());
  writer.writestartelement("clomunname", ""); //columnname开始
  for (int i = 0; i < dt.columns.count; i++)
  {
   writer.writeattributestring(
    "column" + i.tostring(), dt.columns[i].columnname);
  }
  writer.writeendelement(); //columnname结束
  //按行各行
  for (int j = 0; j < dt.rows.count; j++)
  {
   writer.writestartelement("row" + j.tostring(), "");
   //打印各列
   for (int k = 0; k < dt.columns.count; k++)
   {
    writer.writeattributestring(
     "column" + k.tostring(), dt.rows[j][k].tostring());
   }
   writer.writeendelement();
  }
  writer.writeendelement(); //datatable结束
  writer.writeenddocument();
  writer.close();
  //xml文档创建结束
 }
 catch (exception ex)
 {
  console.writeline(ex.message);
  return false;
 }
 return true;
}

二、将以上述格式在xml中保存的信息读取到datatable内

/// <summary>
/// 从xml文件中读取一个datatable
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="address">xml文件地址</param>
/// <returns></returns>
public static datatable readfromxml(string address)
{
 datatable dt = new datatable();
 try
 {
  if (!file.exists(address))
  {
   throw new exception("文件不存在!");
  }
  xmldocument xmldoc = new xmldocument();
  xmldoc.load(address);
  xmlnode root = xmldoc.selectsinglenode("datatable");
  //读取表名
  dt.tablename = ((xmlelement)root).getattribute("tablename");
  //console.writeline("读取表名: {0}", dt.tablename);
  //读取行数
  int countofrows = 0;
  if (!int.tryparse(((xmlelement)root).
   getattribute("countofrows").tostring(), out countofrows))
  {
   throw new exception("行数转换失败");
  }
  //读取列数
  int countofcolumns = 0;
  if (!int.tryparse(((xmlelement)root).
   getattribute("countofcolumns").tostring(), out countofcolumns)) 
  {
   throw new exception("列数转换失败");
  }
  //从第一行中读取记录的列名
  foreach (xmlattribute xa in root.childnodes[0].attributes)
  {
   dt.columns.add(xa.value);
   //console.writeline("建立列: {0}", xa.value);
  }
  //从后面的行中读取行信息
  for (int i = 1; i < root.childnodes.count; i++)
  {
   string[] array = new string[root.childnodes[0].attributes.count];
   for (int j = 0; j < array.length; j++)
   {
    array[j] = root.childnodes[i].attributes[j].value.tostring();
   }
   dt.rows.add(array);
   //console.writeline("行插入成功");
  }
 }
 catch (exception ex)
 {
  console.writeline(ex.message);
  return new datatable();
 }
 return dt;
}

三、main函数调用

static void main(string[] args)
{
 //1.将datatable内容写入到xml文件
 //建立datatable取名table4test
 datatable dt1 = new datatable("table4test");
 //生成四列,列名为column0-3
 dt1.columns.add("column0");
 dt1.columns.add("column1");
 dt1.columns.add("column2");
 dt1.columns.add("column3");
 //生成四行
 dt1.rows.add("a0", "a1", "a2", "a3");
 dt1.rows.add("b0", "b1", "b2", "b3");
 dt1.rows.add("c0", "c1", "c2", "c3");
 //写入到xml
 if (writetoxml(dt1, "datatable.xml"))
 {
  console.writeline("写入成功");
 }
 //================================
 //2.从xml文件中读取内容到datatable
 //读取信息
 datatable dt2 = readfromxml("datatable.xml");
 //输出读取的信息
 console.writeline("读取到的信息:");
 for (int i = 0; i < dt2.rows.count; i++)
 {
  for (int j = 0; j < dt2.columns.count; j++)
  {
   console.write(dt2.rows[i][j].tostring() + "\t");
  }
  console.writeline();
 }
 console.readline();
}

四、程序运行结果

程序运行结果

C#保存与读取DataTable信息到XML格式的方法

写入后的xml文件

C#保存与读取DataTable信息到XML格式的方法

希望本文所述对大家的c#程序设计有所帮助。