〇、关于本文
本篇博客是对我上一篇博客(C#读取DBF格式的数据表)的补充。
文中的程序通过三种方法读取DBF数据表,并通过SQL语句查询DBF数据表中的内容。
数据表test.dbf的内容与上篇博客的内容相同。
本文中使用的三种方法分别是:
1)通过 Microsoft dBASE Driver 连接
2)通过 Microsoft Visual FoxPro Driver 连接 (安装 Visual Fox Pro 后即可使用)
3)通过 VFP OLEDB 连接 (需要安装 VFPOLEDBSetup.msi)
一、程序控件
二、程序代码
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;";
}
}
}
三、运行示例
END