最近在研究数据导入功能,发现Excel文件有点大,在有大小限制的情况下上传的数据要远远少于CSV文件。CSV文件据我所了解其本质跟txt文件没多大区别(这点没有深入了解,呵呵,欢迎各位来指教),但是可以用Excel工具来打开,编辑起来比较方便。而且其默认打开方式就是Excel,当然这是在装了office excel的情况下。
说CSV跟txt一样,可以看看我们在程序里对其的访问方式,一是通过流的方式来读取,二是以数据库的方式来读取。
以文本流的方式来读取无格式的内容,这是毋庸置疑的。但是我们这里现在讲的是有格式的内容,如果还用文本流的方式来读取就有点麻烦了。
访问内容有格式的CSV和txt文件,当然还是通过使用文本驱动来得比较方便了,但是还有个限制,那就是只能select和insert,而不能对记录做其他的操作,在本章最后面附有各种驱动对于记录的访问权限,感兴趣的朋友可以去看看。
格式,这是很重要的一点,一定要有合法的格式,字段与字段之间要以逗号隔开,第一行记录为列名称,如下:
姓名,年龄,性别
"张三",13,男
"李四",14,女
"王五",15,男
"赵六",16,女
"卓七",17,女
"凌老大",11,"男"
下面附上我的代码
- #region OLEDB访问CSV、txt
- /// <summary>
- /// 文本驱动
- /// </summary>
- string ConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;'";
- /// <summary>
- /// 查询CSV文件记录
- /// </summary>
- /// <param name="directory">目录</param>
- /// <param name="fileName">文件名(带后缀)</param>
- /// <param name="tj">查询条件(例如:"WHERE 姓名 = '凌老大'",如无条件则为null)</param>
- /// <returns></returns>
- public DataSet SelectCSV(string directory, string fileName, string tj)
- {
- DataSet ds = new DataSet();
- OleDbDataAdapter adapter = new OleDbDataAdapter(string.Format("select * from [{0}] " + (tj != null ? tj : ""), fileName), string.Format(ConnStr, directory));
- adapter.Fill(ds);
- return ds;
- }
- /// <summary>
- /// 给CSV文件添加记录
- /// </summary>
- /// <param name="directory">目录</param>
- /// <param name="fileName">文件名(带后缀)</param>
- /// <param name="values">添加记录值(例如"'凌老大',20,'男'")</param>
- /// <returns></returns>
- public int InsertCSV(string directory, string fileName, string values)
- {
- int row = 0;
- using (OleDbConnection conn = new OleDbConnection(string.Format(ConnStr, directory)))
- {
- conn.Open();
- string sql = "INSERT INTO [{0}] VALUES({1})";
- OleDbCommand comm = new OleDbCommand(string.Format(sql, fileName, values), conn);
- row = comm.ExecuteNonQuery();
- }
- return row;
- }
- #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
】