最近在研究数据导入功能,发现Excel文件有点大,在有大小限制的情况下上传的数据要远远少于CSV文件。CSV文件据我所了解其本质跟txt文件没多大区别(这点没有深入了解,呵呵,欢迎各位来指教),但是可以用Excel工具来打开,编辑起来比较方便。而且其默认打开方式就是Excel,当然这是在装了office excel的情况下。

说CSV跟txt一样,可以看看我们在程序里对其的访问方式,一是通过流的方式来读取,二是以数据库的方式来读取。

  以文本流的方式来读取无格式的内容,这是毋庸置疑的。但是我们这里现在讲的是有格式的内容,如果还用文本流的方式来读取就有点麻烦了。

  访问内容有格式的CSV和txt文件,当然还是通过使用文本驱动来得比较方便了,但是还有个限制,那就是只能select和insert,而不能对记录做其他的操作,在本章最后面附有各种驱动对于记录的访问权限,感兴趣的朋友可以去看看。

  格式,这是很重要的一点,一定要有合法的格式,字段与字段之间要以逗号隔开,第一行记录为列名称,如下:

      姓名,年龄,性别
      "张三",13,男
      "李四",14,女
      "王五",15,男
      "赵六",16,女
      "卓七",17,女
      "凌老大",11,"男"

下面附上我的代码

  1. #region OLEDB访问CSV、txt  
  2.     /// <summary>  
  3.     /// 文本驱动  
  4.     /// </summary>  
  5.     string ConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;'";  
  6.     /// <summary>  
  7.     /// 查询CSV文件记录  
  8.     /// </summary>  
  9.     /// <param name="directory">目录</param>  
  10.     /// <param name="fileName">文件名(带后缀)</param>  
  11.     /// <param name="tj">查询条件(例如:"WHERE 姓名 = '凌老大'",如无条件则为null)</param>  
  12.     /// <returns></returns>  
  13.     public DataSet SelectCSV(string directory, string fileName, string tj)  
  14.     {  
  15.         DataSet ds = new DataSet();  
  16.  
  17.         OleDbDataAdapter adapter = new OleDbDataAdapter(string.Format("select * from [{0}] " + (tj != null ? tj : ""), fileName), string.Format(ConnStr, directory));  
  18.         adapter.Fill(ds);  
  19.         return ds;  
  20.     }  
  21.     /// <summary>  
  22.     /// 给CSV文件添加记录  
  23.     /// </summary>  
  24.     /// <param name="directory">目录</param>  
  25.     /// <param name="fileName">文件名(带后缀)</param>  
  26.     /// <param name="values">添加记录值(例如"'凌老大',20,'男'")</param>  
  27.     /// <returns></returns>  
  28.     public int InsertCSV(string directory, string fileName, string values)  
  29.     {  
  30.         int row = 0;  
  31.         using (OleDbConnection conn = new OleDbConnection(string.Format(ConnStr, directory)))  
  32.         {  
  33.             conn.Open();  
  34.             string sql = "INSERT INTO [{0}] VALUES({1})";  
  35.             OleDbCommand comm = new OleDbCommand(string.Format(sql, fileName, values), conn);  
  36.             row = comm.ExecuteNonQuery();  
  37.         }  
  38.         return row;  
  39.     }  
  40.     #endregion 

 


Provider  SELECT  INSERT  UPDATE  DELETE   
SQLOLEDB    Y         Y          Y          Y   
Jet/Access         Y            Y            Y          Y   
Jet/Excel           Y            Y            Y          N   
Jet/Text            Y            Y         N          N   
Jet/Lotus          Y            Y         Y          N   
Jet/HTML          Y            N         N          N   
Jet/dBase         Y            Y         Y          Y   
Jet/Paradox      Y            Y         Y          Y