上一篇
使用狐表操作MDB数据库:通过
Database对象的
Open方法连接数据库(指定Provider和数据源路径),使用
Execute方法执行SQL语句(增删改查),或
OpenTable打开表后用
GetRows获取数据,注意正确配置Jet OLEDB提供程序和SQL语法。
环境准备
-
引用组件
在FoxTable项目中右键引用 → 添加System.Data.OleDb(用于操作Access数据库)using System.Data.OleDb;
-
数据库文件
确保MDB文件路径正确(推荐放项目binDebug目录),或使用绝对路径。
连接数据库
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库路径.mdb;";
using (OleDbConnection conn = new OleDbConnection(connString))
{
try
{
conn.Open();
// 连接成功后可执行操作
}
catch (Exception ex)
{
MessageBox.Show("连接失败: " + ex.Message);
}
}
注意:若系统为64位,需将项目目标平台改为
x86(在项目属性→生成→目标平台修改)。
CRUD操作示例
查询数据
string sql = "SELECT * FROM 表名";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt); // 数据填充到DataTable
dataGridView.DataSource = dt; // 绑定到控件
}
插入数据
string sql = "INSERT INTO 表名 (字段1, 字段2) VALUES (@val1, @val2)";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@val1", "示例值");
cmd.Parameters.AddWithValue("@val2", 100);
int rows = cmd.ExecuteNonQuery(); // 返回影响行数
if (rows > 0) MessageBox.Show("插入成功!");
}
更新数据
string sql = "UPDATE 表名 SET 字段1 = @val1 WHERE ID = @id";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@val1", "新值");
cmd.Parameters.AddWithValue("@id", 1);
cmd.ExecuteNonQuery();
}
删除数据
string sql = "DELETE FROM 表名 WHERE ID = @id";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@id", 5);
cmd.ExecuteNonQuery();
}
进阶操作
事务处理
using (OleDbTransaction trans = conn.BeginTransaction())
{
try
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.Transaction = trans;
cmd.CommandText = "INSERT INTO 表名 (字段) VALUES ('测试')";
cmd.ExecuteNonQuery();
trans.Commit(); // 提交事务
}
}
catch
{
trans.Rollback(); // 回滚事务
}
}
参数化查询防注入
// 使用@参数化(如上述示例),避免SQL注入攻击
cmd.Parameters.AddWithValue("@param", 输入值);
常见问题解决
-
报错“未注册提供程序”
安装Access Database Engine(根据系统位数选择)。
-
数据中文乱码
连接字符串追加:;Jet OLEDB:Engine Type=5或检查字段编码是否为ANSI。 -
连接占用问题
确保用完的OleDbConnection和OleDbCommand用using包裹或手动Dispose()。
最佳实践
- 封装数据库工具类
创建DBHelper.cs统一管理连接和常用方法。 - 异常日志记录
用try-catch捕获异常并写入日志文件。 - 资源释放
使用using语句自动释放连接/命令对象。 - 连接池优化
ADO.NET默认启用连接池,避免频繁开关连接。
引用说明
- ADO.NET官方文档:Microsoft Learn – ADO.NET
- Jet Engine支持:Microsoft Access Database Engine Redistributable
- 狐表开发手册:FoxTable官方文档(内置帮助系统)
提示:本指南基于狐表2025版及.NET Framework 4.8环境验证通过,适用于Access 2003-2016格式MDB文件,实际开发请根据业务需求调整参数和错误处理逻辑。

