新手上路之DBF文件的读取

初次了解DBF文件,因为有需求要将其中的数据导出,并插入到数据库中。开始的时候用Excel把它打开了,以为它就是一个Excel文件,就想着用NPOI来实现,显然是作为一个新人太天真了,后来在别人的博客上了解到,读取这个文件有多种方式,根据不同的难易用不同的方法,由于我所接触的这个文件中没有过多的约束,我也就用了最简单的一种。

 /// <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;
            }
        } 
View Code

将DBF文件读取出来后存在了DataSet中,接下来就是要将值插入到数据库中,由于本人的能力有限,要插入的数据库是事先已经写好的结构,之后直接插入的。这个方法主要的功能就是进行字符串的拼接

        /// <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;
        }             
View Code

最后也就是最简单的向数据库中插值了

 /// <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();
                }
            }
        } 
View Code

这样一个简单的将DBF文件读取出来并插入到数据库中的操作就完成了。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。