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文件,实际开发请根据业务需求调整参数和错误处理逻辑。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/14553.html