C#读取DBF格式的数据表(扩充版)

〇、关于本文

本篇博客是对我上一篇博客(C#读取DBF格式的数据表)的补充。

文中的程序通过三种方法读取DBF数据表,并通过SQL语句查询DBF数据表中的内容。

数据表test.dbf的内容与上篇博客的内容相同。

本文中使用的三种方法分别是:

1)通过 Microsoft dBASE Driver 连接

2)通过 Microsoft Visual FoxPro Driver 连接 (安装 Visual Fox Pro 后即可使用)

3)通过 VFP OLEDB 连接 (需要安装 VFPOLEDBSetup.msi)

一、程序控件

231255_J1II_1425762.png

231256_Yv83_1425762.png

二、程序代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DbfReader
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        //初始化
        private void FormMain_Load(object sender, EventArgs e)
        {
            rdbVfpDriver.Checked = true;
            txtSql.Text = @"SELECT * FROM TEST_DBF.dbf";
        }

        private void btnReadDbf_Click(object sender, EventArgs e)
        {
            if (rdbDBase.Checked == true || rdbVfpDriver.Checked == true)
            {
                try
                {
                    //需要 using System.Data.Odbc;
                    System.Data.Odbc.OdbcConnection ocConn =
                        new System.Data.Odbc.OdbcConnection();

                    string strConn = txtConnString.Text;

                    ocConn.ConnectionString = strConn;
                    ocConn.Open();

                    OdbcDataAdapter oda = new OdbcDataAdapter(txtSql.Text, ocConn);
                    DataTable dt = new DataTable();
                    oda.Fill(dt);
                    dgvData.DataSource = dt;
                    ocConn.Close();

                    MessageBox.Show("读取完毕,查询结果共计: " + dt.Rows.Count + " 条");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else if (rdbVfpOledb.Checked == true)
            {
                try
                {

                    //需要 using System.Data.OleDb 安装 VFPOLEDBSetup.msi
                    string strConn = txtConnString.Text; //

                    using (OleDbConnection oledbConn = new OleDbConnection(strConn))
                    {
                        OleDbDataAdapter Odda = new OleDbDataAdapter(txtSql.Text, oledbConn);
                        DataTable dt = new DataTable();
                        Odda.Fill(dt);
                        dgvData.DataSource = dt;
                        oledbConn.Close();

                        MessageBox.Show("读取完毕,查询结果共计: " + dt.Rows.Count + " 条");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        //通过 Microsoft dBASE Driver 访问
        private void rdbDBase_CheckedChanged(object sender, EventArgs e)
        {
            txtConnString.Text =
                @"Driver={Microsoft dBASE Driver (*.dbf)}; SourceType=DBF; " +
                @"Data Source=" + Application.StartupPath +
                @"\TEST_DBF.dbf; Exclusive=No; NULL=NO; " +
                @"Collate=Machine; BACKGROUNDFETCH=NO; DELETE=NO";
        }

        //通过 Microsoft Visual FoxPro Driver 访问
        private void rdbVfpDriver_CheckedChanged(object sender, EventArgs e)
        {
            txtConnString.Text =
                @"Driver={Microsoft Visual FoxPro Driver}; SourceType=DBF; " +
                @"sourcedb=" + Application.StartupPath +
                @"\TEST_DBF.dbf; BACKGROUNDFETCH=NO; DELETE=NO";
        }

        //通过 vfpoledb 访问
        private void rdbVfpOledb_CheckedChanged(object sender, EventArgs e)
        {
            txtConnString.Text =
                @"Provider=vfpoledb; Data Source=" + Application.StartupPath + 
                @"\TEST_DBF.dbf; Collating Sequence=machine;";
        }
    }
}

三、运行示例

231421_oVw7_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/279662

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值