初次了解DBF文件,因为有需求要将其中的数据导出,并插入到数据库中。开始的时候用Excel把它打开了,以为它就是一个Excel文件,就想着用NPOI来实现,显然是作为一个新人太天真了,后来在别人的博客上了解到,读取这个文件有多种方式,根据不同的难易用不同的方法,由于我所接触的这个文件中没有过多的约束,我也就用了最简单的一种。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// <summary> /// 读取DBF文件,此方法适用于简单的DBF文件,即类似深交所的文件 /// </summary> /// <param name="path">要读取的文件所在的路径</param> /// <param name="OleDbName">要读取文件的名称</param> /// <returns></returns> public static DataSet ReadDBF(string path, string OleDbName) { string strConn = @"Provider=vfpoledb;Data Source=" + path + ";Collating Sequence=machine;"; using (OleDbConnection myConnection = new OleDbConnection(strConn)) { OleDbDataAdapter adpt = new OleDbDataAdapter("select * from " + OleDbName, myConnection); DataSet mySet = new DataSet(); adpt.Fill(mySet); myConnection.Close(); return mySet; } }
将DBF文件读取出来后存在了DataSet中,接下来就是要将值插入到数据库中,由于本人的能力有限,要插入的数据库是事先已经写好的结构,之后直接插入的。这个方法主要的功能就是进行字符串的拼接
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// <summary> /// 给要插入数据库的字段赋值,返回的是sql语句 /// </summary> /// <param name="data">从DBF中取出来存在DataSet中的数据</param> /// <param name="tableName">要插入的数据库的表明</param> /// <param name="name">定义数据表中,除了自动生成的GUId外还有多少个字段</param> /// <returns>拼接好的sql语句</returns> public static string SetValue(DataSet data, string tableName, params string[] name) { int count = data.Tables[0].Columns.Count; string sql = null; int number = 0; foreach (DataRow item in data.Tables[0].Rows) { //表中的主键是用GUID生成的 string guid = Guid.NewGuid().ToString(); string value = "'"+guid+"'" + ","; for (int i = 0; i < count; i++) { if (i == count- 1) { name[i] = "'" + item[i].ToString() + "'"; number++; } else { name[i] = "'" + item[i].ToString() + "'" + ","; number++; } value += name[i]; }//for string newsql = "insert into " +" "+ tableName + " "+"values(" + value + ")"; sql += newsql; }//foreach return sql; }
最后也就是最简单的向数据库中插值了
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// <summary> /// 执行sql语句,向数据库中插值 /// </summary> /// <param name="sql">sql语句</param> /// <returns></returns> public static int YExecuteNonquer(string sql) { string ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString; using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sql, conn)) { return cmd.ExecuteNonQuery(); } } }
这样一个简单的将DBF文件读取出来并插入到数据库中的操作就完成了。