C#编程学习35:对MDB数据库的操作
目录
1 名称空间引用
2 C#操作MDB自编函数
2.1 从mdb中获取所有表格内容
2.2 从mdb文件中得到所有数据表的名称
2.3 获取数据表的内容到DataTable
3 为文本框添加拖拽及气泡提示功能
3.1 【拖拽功能源码】
3.2 添加气泡显示操作:
4 添加数据提取按钮和comboBox控件
4.1 提取mdb文件数据并将其存放到comboBox控件中
4.2 为comboBox控件添加selectedItemChanged事件
5 软件效果
6 改进
6.1 界面搭建
6.2 核心源码
6.3 删除当前选中的数据行
6.4 改进效果
7 参考文献:
1 名称空间引用
using System.Data.OleDb;
控件准备:两个TextBox、一个按钮、一个comboBox
2 C#操作MDB自编函数
2.1 从mdb中获取所有表格内容
/// <summary>/// 根据指定的mdb文件获取其中的表格数据/// </summary>/// <param name="mdbPath"> MDB文件路径</param>/// <returns></returns>public DataTable getTableFromMdb(string mdbPath){OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+mdbPath);conn.Open();DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });conn.Close();conn.Dispose();return dt;}
2.2 从mdb文件中得到所有数据表的名称
/// <summary>/// 根据从mdb中读取的table,获取所有Table的名称/// </summary>/// <param name="mdbPath">mdb文件路径</param>/// <returns></returns>public List<string> getAllTableName(string mdbPath){List<string> AllTableName = new List<string>();DataTable dt = getTableFromMdb( mdbPath);for (int i = 0, maxI = dt.Rows.Count; i < maxI; i++){// 获取第i个Access数据库中的表名string sTempTableName = dt.Rows[i]["TABLE_NAME"].ToString();AllTableName.Add(sTempTableName);}return AllTableName;}
2.3 获取数据表的内容到DataTable
/// <summary>/// 从给定的mdb中获取指定名称数据表的内容,将其返回到DataTable表中/// </summary>/// <param name="mdbPath">mdb名称</param>/// <param name="tableName">数据表名称</param>/// <returns>返回数据表的内容</returns>public DataTable getTableContentFromMDB(string mdbPath, string tableName){OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath);OleDbCommand cmd = conn.CreateCommand();cmd.CommandText = "select * from " + tableName;OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);DataSet ds = new DataSet();adapter.Fill(ds);adapter.Dispose();cmd.Dispose();conn.Close();return ds.Tables[0];}
3 为文本框添加拖拽及气泡提示功能
3.1 【拖拽功能源码】
3.2 添加气泡显示操作:
首先向要添加气泡的文本框内拖拽一个【toolTip】控件
添加鼠标驻留事件,这里让鼠标驻留之后,显示文本框的文本内容
//鼠标驻留要进行的操作private void textBox2_MouseHover(object sender, EventArgs e){toolTip1.IsBalloon = true;toolTip1.SetToolTip(this.textBox2, this.textBox2.Text);}
4 添加数据提取按钮和comboBox控件
4.1 提取mdb文件数据并将其存放到comboBox控件中
/// <summary>/// 提取mdb文件中的数据/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void buttonGetTableNames_Click(object sender, EventArgs e){string mdbPath = textBox2.Text;//string str = System.IO.Path.GetExtension(mdbPath);if (System.IO.Path.GetExtension(mdbPath) != ".mdb"){MessageBox.Show("您输入的不是MDB文件,请核查文件类型", "错误提示", MessageBoxButtons.OK,MessageBoxIcon.Warning);return;}List<string> tableNames = getAllTableName(textBox2.Text);foreach (string tableName in tableNames){//textBox1.AppendText(tableName + "\t\r\n");comboBoxTable.Items.Add(tableName);}//设置comboBox的默认值comboBoxTable.SelectedIndex = 0;}
4.2 为comboBox控件添加selectedItemChanged事件
/// <summary>/// 当comboBox控件的值发生变化时,打印出对应表格的数据项/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void comboBoxTable_SelectedValueChanged(object sender, EventArgs e){textBox1.Clear();string tableName = comboBoxTable.SelectedItem.ToString();//MessageBox.Show(tableName);string mdbPath = textBox2.Text;DataTable dt = getTableContentFromMDB(mdbPath, tableName);for (int row = 0; row < dt.Rows.Count; row++){//获取每一行的数据DataRow dr = dt.Rows[row];//遍历存储每一行的数组,取出对应位置的元素for (int col = 0; col < dr.ItemArray.Count(); col++){textBox1.AppendText(dr.ItemArray[col].ToString() + "\t");}textBox1.AppendText("\r\n");}}
5 软件效果
6 改进
6.1 界面搭建
将comboBox改成树视图同时使用DataGridView进行数据展示
6.2 核心源码
打开按钮源码
private void buttonGetInfo_Click(object sender, EventArgs e){string mdbPath = textBox1.Text;//string str = System.IO.Path.GetExtension(mdbPath);if (System.IO.Path.GetExtension(mdbPath) != ".mdb"){MessageBox.Show("您输入的不是MDB文件,请核查文件类型", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}//获取所有数据表的名称,将其填充到treeView1中List<string> tableNames = getAllTableName(textBox1.Text);TreeNode parentNode = new TreeNode(System.IO.Path.GetFileNameWithoutExtension(mdbPath));treeView1.Nodes.Add(parentNode);foreach (string tableName in tableNames){TreeNode tn = new TreeNode(tableName);parentNode.Nodes.Add(tn);}treeView1.SelectedNode = parentNode.Nodes[0];fillDataGridView(getTableContentFromMDB(mdbPath, tableNames[0]));treeView1.Show();treeView1.ExpandAll();}
树控件节点双击事件
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e){string mdbPath = textBox1.Text;string tableName = treeView1.SelectedNode.Text;fillDataGridView(getTableContentFromMDB(mdbPath,tableName));}
将DataTable数据表与DataGirdView绑定
private void fillDataGridView(DataTable dt){//将数据表与dataGridView控件绑定dataGridView1.DataSource = dt;dataGridView1.Show();}
6.3 删除当前选中的数据行
- 为dataGridView添加ContextMenuStrip控件
- 为dataGridView控件添加行头双击事件,绑定右键菜单
- 右键菜单【删除】按钮;首先指定删库操作,若成功,就删除删除dataGirdView的数据
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e){dataGridView1.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;dataGridView1.CurrentRow.Selected = true;dataGridView1.ContextMenuStrip = contextMenuStripDgv;}//得到所选行索引 public int getSelectedIndex() { int count = this.dataGridView1.Rows.Count; for (int i = 0; i < count - 1; i++) { if (dataGridView1.Rows[i].Selected == true) return i;} return -1; }//对数据表的操作 public bool DataSheetOperate(string mdbPath,string cmdstr) {OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath);OleDbCommand cmd = new OleDbCommand(cmdstr, conn); try { conn.Open(); cmd.ExecuteNonQuery(); } catch { return false;} finally { conn.Close(); cmd.Dispose(); } return true; }//数据表的右键删除按钮private void toolStripMenuItemDelete_Click(object sender, EventArgs e){string mdbPath = textBox1.Text;if (getSelectedIndex() >= 0) { int rowIndex = getSelectedIndex(); //获取当前选中数据行的索引string id = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString(); //从数据库中获取选中行对应的ID,构成删除指令string cmdstr = "delete from "+ treeView1.SelectedNode.Text + " where ID=" + id;//先执行数据库的删除工作,之后删除dataGridView中的数据记录if (DataSheetOperate(mdbPath,cmdstr)) { this.dataGridView1.Rows.RemoveAt(rowIndex); MessageBox.Show("删除数据成功!", "提示信息"); } else { MessageBox.Show("删除数据失败!", "提示信息"); } } else { MessageBox.Show("请先选择一行数据", "提示信息");}}
6.4 改进效果
后续将考虑使用DataGridView,进行数据增删改等编辑操作
7 参考文献:
- C# winform treeview添加右键菜单并选中节点
- C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
- C#编程学习(20):对比两个mdb文件的图层包含的要素数目是否一致
- c# dataGridView与access数据库及其增删查改导出报表等
更多精彩欢迎关注【运筹优化与图像处理算法编程】公众号
C#编程学习35:对MDB数据库的操作相关推荐
- shell脚本编程学习笔记(四)shell操作数据库
一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构: ...
- Java -- JDBC 学习--通过Statement进行数据库更新操作
通过 JDBC 向指定的数据表中插入一条记录. 1. Statement: 用于执行 SQL 语句的对象 1). 通过 Connection 的 createStatement() 方法来获取 2). ...
- MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)...
(01) 连接数据库 mysql -uroot -p 之后输入密码 ******.(由于我的密码设置的是111,所以输入的是111) (02) 退出数据库 exit (03) 查看数据库 show d ...
- tp5.0 mysql_《TP5.0学习笔记---对Mysql数据库的操作(一)》
一.连接数据库 在ThinkPHP框架中,它为我们提供了非常方便的方式连接数据库,我们可以通过简单的修改配置文件就可以连接上我们的mysql/oracle/SQL Server. 在我们的PHP中,大 ...
- 【web学习之Mysql】数据库-----查询操作------大全
1.选择特定的字段 select pass,id from user where id=3; sql语言中"="和"=="是一样的 2.给字段取别名-as se ...
- C# 创建MDB数据库、并存放表格数据的案例
下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,这是一个类,用完之后记得用Close()方法. ...
- C#创建MDB数据库、并存放表格数据
下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,,,这是一个类,用完之后记得用Close()方 ...
- C#编程学习51:操作MDB数据库
首先导入需要的命名空间 using System.Data.OleDb; 然后在界面上添加dataGridView控件和相关按钮 功能点1:将数据库中的数据显示在界面的dataGridView控件上 ...
- java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档
java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档 java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档 本源码技术栈: 项目架构 ...
最新文章
- 代码之谜(零)- 开篇/前言/序
- 利用poi进行数据的excel导出
- windows环境下nginx的入门配置跳转tomcat
- poj3190 区间贪心 挑战程序设计竞赛
- MVC系列学习(十五)-验证码
- cmmi写文档工作教训
- 来自一个用户的体验-Alpha项目测试
- JavaWeb之得到web应用中的资源文件
- 如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
- 三星固态硬盘linux驱动,三星850evo固态硬盘驱动程序官方版
- 【刷题】清橙 A1339 JZPLCM(顾昱洲)
- 【计算机毕业设计】java+mysql基于SSM的生鲜超市进销存管理系统
- pycharm远程连接服务器完整教程
- 计算机卸载一个程序正确操作,电脑这两个操作要学会,两种卸载软件的方法,保证电脑系统稳定...
- C语言及ARM中堆栈指针SP设置的理解与总结
- 0x80070002(0x80070002错误代码怎么解决)
- 发现答案茶,真的不一样
- ubuntu自动挂载smba服务器
- 3万字英国留学生Java后台面经,中offer率5/7 精
- 5G基本概念及其发展概况
热门文章
- arduino使用oled代码_Arduino提高篇14—摇杆按键操作OLED
- Casinos and travel[智力和快速幂]
- Fibonacci数列 Huffman树
- 别看唐探了,Q(ueue)的真相在这里
- 教学中利用计算机软件,计算机软件应用类课程教学方法探讨
- C#.net 地图控件开发(七) 地图符号,几何图形样式Symbol
- SMS短信中英文混合编码
- python练手(PyAutoGUI)
- cf不显示前往回归服务器,《CF》回归服务器奖励一览
- 三菱Q系列CC_LINK远程设备站(模拟量)的应用