最近在研究数据导入功能,发现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
】