关于C#操作DataTable和TXT问题。高手请进

时间:2022-03-28 11:26:38
时间比较紧迫,我就不说废话 了。先上图 关于C#操作DataTable和TXT问题。高手请进先解释下图啊,上图是一个C#中窗体。表中选择文件后面跟的事文件浏览框,选择Excel的,Excel表指的是所选择的Excel中的sheet。姑且我们也把他成为表吧。目的表是指SQL数据库中的表(数据库是在前面已经选好了,不需要操心了);图中的数据是Excel的sheet和SQL数据库表的所有字段。source下面的Excel中sheet(人员基本信息)的所有列。数据表列名就是哪个表(人员基本信息)的所有列名了。


问题是这样的。现在需要将上图Excel表中的sheet名(即上图Excel表中的“人员基本信息”)和目的表名(“人员基本信息”)保存到一个txt文件中。其中Ttxt还要保存图中所有对应起来的的列字段的关系,这些全部保存在一个txt文件中。
举例说明txt文件的格式

Excel的表名-----------------SQL的表名
Excel的第一列---SQL表中的第一列
Excel的第二列---SQL表中的第二列
Excel的第3列---SQL表中的第3列
。。。。。。。。在详细点吧(每次各位大侠都说我讲的不详细)实例如下:


人员基本信息-----人员基本信息
姓名---姓名
工号--工号
身份证----身份证
。。。。。。。。。
。。。。

等等。保存好之后,
当我下次选择这二个对应的表的时候,字段对应的关系会自动从txt文件中匹配上,省去手工匹配的麻烦(因为表中的列很多啊),求高手啊,求源码或者示例。。。小弟我对操作文件不熟悉。好心的大哥哥姐姐们,帮帮小弟啊。最好加我QQ 594498390 详聊。谢谢啊!

10 个解决方案

#1


感觉用xml来保存对应关系比较好

<ColumnModel>
    <LeftName>人员基本信息</LeftName>
    <RightName>人员基本信息</RightName>
 </ColumnModel>

...

再编写一个类就很容易对应起来了。
没试过用txt来保存。

#2


引用 1 楼 shadow_left 的回复:
感觉用xml来保存对应关系比较好

<ColumnModel>
    <LeftName>人员基本信息</LeftName>
    <RightName>人员基本信息</RightName>
 </ColumnModel>

...

再编写一个类就很容易对应起来了。
没试过用txt来保存。
请问xml的怎么写啊?给我参考下

#3


DataSet可以直接TO XML

#4


给你个些txt的:
        public static void WriteCSV(string filePathName, List<string[]> ls)
        {
            StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
            foreach(string[] strArr in ls)
            {
                fileWriter.WriteLine(String.Join (“\t",strArr) );   //以tab为分隔
            }
            fileWriter.Flush();
            fileWriter.Close();           
        }

楼主,你先获取表格最新数据,存入List<string[]> ls变量,
如何调用上面的方法!

#5


Txt存多张表的对应关系,会非常不利于查找,建议用XML,XML读写可参考http://blog.csdn.net/fishpowersoft/article/details/1957113

#6


补上后续:

  public static void WriteTxt(string filePathName,bool append, List<string[]> ls)
  {
  StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
  foreach(string[] strArr in ls)
  {
  fileWriter.WriteLine(String.Join (“\t",strArr) ); //以tab为分隔
  }
  fileWriter.Flush();
  fileWriter.Close();  
  }

                List<string[]> all = new List<string[]>();
                foreach(DataGridViewRow dgr in dataGridView1.Rows)
                {
                    List<string> rowList = new List<string>();
                    foreach(DataGridViewCell dgc in dgr.Cells)
                    {
                        rowList.Add(dgc.Value.ToString());
                    }
                    all.Add(rowList.ToArray());
                }
调用:
WriteTxt("c:\\test.txt",false,all );

#7


麻烦各位神人看清需求啊。。

#8


引用 6 楼 sdl2005lyx 的回复:
补上后续:

  public static void WriteTxt(string filePathName,bool append, List<string[]> ls)
  {
  StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
  foreach(string[] ……
真的可以嘛,牛人,可以留下你的企鹅嘛?

#9


xml文档如下
<?xml version="1.0" encoding="utf-8"?>
<TableModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EngName>英文表名</EngName>
  <ChnName>中文表名</ChnName>
  <Columns>
    <ColumnModel>
      <LeftName>人员基本信息</LeftName>
      <RightName>人员基本信息</RightName>
    </ColumnModel>
    <ColumnModel>
      <LeftName>身份证号</LeftName>
      <RightName>身份证号号</RightName>
    </ColumnModel>
....
  </Columns>
</TableModel>

xml就类似这样写。
c#的类
public class TableModel
    {
        private string _engName;            //表的英文名
        private string _chnName;            //表的中文名
        private List<ColumnModel> _columns = new List<ColumnModel>(); //字段结构
    }
 public class ColumnModel
    {
        private string leftName;            //表中字段名
        private string rightName;
    }
这些都要封装,我这里省略了。

还要写读写的函数。

public class MyXmlSerializer<T>
    {
        #region 读函数

        /// <summary>
        /// 从文件filename中获取类型为T的配置信息。
        /// </summary>
        /// <param name="fileName">文件的地址</param>
        /// <returns></returns>
        public static T Read(string fileName)
        {
            if (!File.Exists(fileName))
            {
                throw new ArgumentException("请输入有效的配置文件路径:" + fileName);
            }
            T up;
            //try
            //{
                XmlSerializer myxml = new XmlSerializer(typeof (T));
                using (StreamReader reader = new StreamReader(fileName, Encoding.UTF8))
                {
                    up = (T)myxml.Deserialize(reader);
                    reader.Close();
                }
           // }
            //catch (XmlException e)
            //{
            //    throw new XmlException("文件" + fileName + ":" + e.Message);
            //}
            return up;
        }

        #endregion

        #region 写函数

        /// <summary>
        /// 将类型为T的配置信息,保持在文件fileName中
        /// </summary>
        /// <param name="config">配置信息</param>
        /// <param name="fileName">文件地址</param>
        public static void Write(T config, string fileName)
        {
            try
            {
                XmlSerializer myxml = new XmlSerializer(typeof(T));
                using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.UTF8))
                {
                    myxml.Serialize(writer, config);
                    writer.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }

使用的时候
private TableModel abc = new TableModel();
abc = MyXmlSerializer<TableModel>.Read(xml文件的路径);

写了这么多,希望对你有用。

#10


用xml写 到时候表中字段修改了,改起来很方便,受益很多的。

#1


感觉用xml来保存对应关系比较好

<ColumnModel>
    <LeftName>人员基本信息</LeftName>
    <RightName>人员基本信息</RightName>
 </ColumnModel>

...

再编写一个类就很容易对应起来了。
没试过用txt来保存。

#2


引用 1 楼 shadow_left 的回复:
感觉用xml来保存对应关系比较好

<ColumnModel>
    <LeftName>人员基本信息</LeftName>
    <RightName>人员基本信息</RightName>
 </ColumnModel>

...

再编写一个类就很容易对应起来了。
没试过用txt来保存。
请问xml的怎么写啊?给我参考下

#3


DataSet可以直接TO XML

#4


给你个些txt的:
        public static void WriteCSV(string filePathName, List<string[]> ls)
        {
            StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
            foreach(string[] strArr in ls)
            {
                fileWriter.WriteLine(String.Join (“\t",strArr) );   //以tab为分隔
            }
            fileWriter.Flush();
            fileWriter.Close();           
        }

楼主,你先获取表格最新数据,存入List<string[]> ls变量,
如何调用上面的方法!

#5


Txt存多张表的对应关系,会非常不利于查找,建议用XML,XML读写可参考http://blog.csdn.net/fishpowersoft/article/details/1957113

#6


补上后续:

  public static void WriteTxt(string filePathName,bool append, List<string[]> ls)
  {
  StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
  foreach(string[] strArr in ls)
  {
  fileWriter.WriteLine(String.Join (“\t",strArr) ); //以tab为分隔
  }
  fileWriter.Flush();
  fileWriter.Close();  
  }

                List<string[]> all = new List<string[]>();
                foreach(DataGridViewRow dgr in dataGridView1.Rows)
                {
                    List<string> rowList = new List<string>();
                    foreach(DataGridViewCell dgc in dgr.Cells)
                    {
                        rowList.Add(dgc.Value.ToString());
                    }
                    all.Add(rowList.ToArray());
                }
调用:
WriteTxt("c:\\test.txt",false,all );

#7


麻烦各位神人看清需求啊。。

#8


引用 6 楼 sdl2005lyx 的回复:
补上后续:

  public static void WriteTxt(string filePathName,bool append, List<string[]> ls)
  {
  StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
  foreach(string[] ……
真的可以嘛,牛人,可以留下你的企鹅嘛?

#9


xml文档如下
<?xml version="1.0" encoding="utf-8"?>
<TableModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EngName>英文表名</EngName>
  <ChnName>中文表名</ChnName>
  <Columns>
    <ColumnModel>
      <LeftName>人员基本信息</LeftName>
      <RightName>人员基本信息</RightName>
    </ColumnModel>
    <ColumnModel>
      <LeftName>身份证号</LeftName>
      <RightName>身份证号号</RightName>
    </ColumnModel>
....
  </Columns>
</TableModel>

xml就类似这样写。
c#的类
public class TableModel
    {
        private string _engName;            //表的英文名
        private string _chnName;            //表的中文名
        private List<ColumnModel> _columns = new List<ColumnModel>(); //字段结构
    }
 public class ColumnModel
    {
        private string leftName;            //表中字段名
        private string rightName;
    }
这些都要封装,我这里省略了。

还要写读写的函数。

public class MyXmlSerializer<T>
    {
        #region 读函数

        /// <summary>
        /// 从文件filename中获取类型为T的配置信息。
        /// </summary>
        /// <param name="fileName">文件的地址</param>
        /// <returns></returns>
        public static T Read(string fileName)
        {
            if (!File.Exists(fileName))
            {
                throw new ArgumentException("请输入有效的配置文件路径:" + fileName);
            }
            T up;
            //try
            //{
                XmlSerializer myxml = new XmlSerializer(typeof (T));
                using (StreamReader reader = new StreamReader(fileName, Encoding.UTF8))
                {
                    up = (T)myxml.Deserialize(reader);
                    reader.Close();
                }
           // }
            //catch (XmlException e)
            //{
            //    throw new XmlException("文件" + fileName + ":" + e.Message);
            //}
            return up;
        }

        #endregion

        #region 写函数

        /// <summary>
        /// 将类型为T的配置信息,保持在文件fileName中
        /// </summary>
        /// <param name="config">配置信息</param>
        /// <param name="fileName">文件地址</param>
        public static void Write(T config, string fileName)
        {
            try
            {
                XmlSerializer myxml = new XmlSerializer(typeof(T));
                using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.UTF8))
                {
                    myxml.Serialize(writer, config);
                    writer.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }

使用的时候
private TableModel abc = new TableModel();
abc = MyXmlSerializer<TableModel>.Read(xml文件的路径);

写了这么多,希望对你有用。

#10


用xml写 到时候表中字段修改了,改起来很方便,受益很多的。