C# 读取dbf文件中的数据到datatable中



方式一:通过ODBC读取 代码如下

/// <summary>

/// 读取dbf文件中的数据 如所在目录为E:\manman\aa.dbf
/// </summary>
/// <param name="tableName">要读取的表名(也就是文件名)aa</param>
/// <param name="defaultDir">文件所在的路径不包括文件名E:\manman</param>
/// <returns></returns>

private DataTable GetDbfDataByODBC(string tableName, string defaultDir)
        {
            OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + defaultDir;
            oConn.Open();
            OdbcDataAdapter odbcDataAdapt = new OdbcDataAdapter("select * from  " + tableName, oConn.ConnectionString);
            DataTable dtData = new DataTable();
            dtData.TableName = "gb";
            odbcDataAdapt.Fill(dtData);
            oConn.Close();
            return dtData;    
        }

方式二:通过VFP读取,不过这需要装VFPOLEDB.1驱动 代码如下

/// <summary>
        /// 读取dbf文件中的数据 如所在目录为E:\manman\aa.dbf
        /// </summary>
        /// <param name="tableName">要读取的表名(也就是文件名)aa</param>
        /// <param name="tablePath">文件所在的路径不包括文件名E:\manman\aa.dbf</param>
        /// <returns></returns>

private OleDbDataReader DbfToDs(string tableName,string tablePath)
        {
            string my_StrSel = @"select * from " + tableName;
            OleDbConnection mycon = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=" + tablePath + ";collating Sequence=MACHINE");
            OleDbCommand mycom = new OleDbCommand(my_StrSel, mycon);
            mycon.Open();
            OleDbDataReader myreader = mycom.ExecuteReader();

            return myreader;
        }
        private DataTable GetDbfData(string tableName,string tablePath)
        {
           
            OleDbDataReader myreader=null ;
            try
            {
                myreader   = DbfToDs(tableName,tablePath);
                DataTable tab = new DataTable() ;
                for (int i = 0; i < myreader.VisibleFieldCount;i++ )
                {
                    tab.Columns.Add(myreader.GetName(i),myreader.GetFieldType(i));
                }
                DataRow row;
                while (myreader .Read ())
                {
                    row = tab.NewRow();
                    for (int i = 0; i < tab.Columns.Count;i ++ )
                    {
                        row[i] = myreader.GetValue(i);
                    }
                    tab.Rows.Add(row );
                }
                return tab;            
            }
            catch (Exception ex)
            {
                Message.Show(ex.Message);
                return null;
            
       
        }

感谢博主http://blog.sina.com.cn/huomanman

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值