请教高手:从面向对象的思想上如何设计web导入csv文件的问题,我的理解是该类应该包括什么共通的功能,在线等,谢谢

解决方案 »

  1.   

    就是说一个csv文件(逗号隔开的字符,打开文件是用excel文件打开的),在页面有个导入按钮,点击导入后弹出打开(路径),之后就可以把该excel(csv)文件导入到数据库中去,这个功能怎么实现,怎么能让他做成共通的类,新手上路,老师布置的作业,拜托各位高手
      

  2.   

    public interface ICSVWriterReader   
    {//define a interface   
      string CSVFile { get; set; } //csv file   
      DataTable Read();//read csv to DataTable.   
      bool Write(DataTable dt); //convert datatable to csv   
    }     public class CSVHelper:ICSVWriterReader   
      {   
      private string _csvFile;   
       
      public CSVHelper(string csvFile)   
      {   
      this._csvFile = csvFile;   
      }   
     
      #region ICSVWriterReader Members   
       
      public string CSVFile   
      {   
      get{ return _csvFile; }   
      set{ _csvFile=value ;}   
      }   
       
      public DataTable Read()   
      {   
      FileInfo fi = new FileInfo(this._csvFile);   
      if (fi == null || !fi.Exists) return null;   
       
      StreamReader reader = new StreamReader(this._csvFile);   
       
      string line = string.Empty; int lineNumber = 0;   
       
      DataTable dt = new DataTable();   
       
      while ((line = reader.ReadLine()) != null)   
      {   
      if (lineNumber == 0)   
      {//Create Tole   
      dt = CreateDataTable(line);   
      if (dt.Columns.Count == 0) return null;   
      }   
      else   
      {   
      bool isSuccess = CreateDataRow(ref dt, line);   
      if (!isSuccess) return null;   
      }   
      lineNumber++;   
      }   
       
      return dt;   
      }   
       
      public bool Write(DataTable dt)   
      {   
      FileInfo fi = new FileInfo(this._csvFile);   
      if (fi == null || !fi.Exists) return false;   
       
      if (dt == null || dt.Columns.Count == 0 || dt.Rows.Count == 0) return false;   
       
      StreamWriter writer = new StreamWriter(this._csvFile);   
      //writer.AutoFlush = true;   
       
      string line = string.Empty;   
       
      line = CreateTitle(dt);   
      writer.WriteLine(line);   
       
      foreach (DataRow dr in dt.Rows)   
      {   
      line = CretreLine(dr);   
      writer.WriteLine(line);   
      }   
       
      writer.Flush();   
       
      return true;   
      }   
       
       
      private DataTable CreateDataTable(string line)   
      {   
      DataTable dt = new DataTable();   
      foreach (string field in   
      line.Split(FormatSplit, StringSplitOptions.None))   
      {   
      dt.Columns.Add(field);   
      }   
      return dt;   
      }   
       
      private bool CreateDataRow(ref DataTable dt, string line)   
      {   
      DataRow dr = dt.NewRow();   
       
      string[] fileds=line.Split(FormatSplit, StringSplitOptions.None);   
       
      if (fileds.Length == 0 || fileds.Length != dt.Columns.Count) return false;   
       
      for (int i = 0; i < fileds.Length; i++)   
      {   
      dr[i] = fileds[i];   
      }   
       
      dt.Rows.Add(dr);   
      return true;   
      }   
       
      private char[] FormatSplit   
      {   
      get { return new char[] { ',' }; }   
      }   
       
      private string CreateTitle(DataTable dt)   
      {   
      string line = string.Empty;   
       
      for (int i = 0; i < dt.Columns.Count; i++)   
      {   
      line += string.Format("{0}{1}", dt.Columns[i].ColumnName,FormatSplit[0].ToString());   
      }   
       
      line.TrimEnd(FormatSplit[0]);   
       
      return line;   
      }   
       
      private string CretreLine(DataRow dr)   
      {   
      string line = string.Empty;   
       
      for (int i = 0; i < dr.ItemArray.Length;i++)   
      {   
      line += string.Format("{0}{1}", dr[i], FormatSplit[0].ToString());   
      }   
       
      line.TrimEnd(FormatSplit[0]);   
      return line;   
      }   
      }   
    }