目录

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 删除当前选中的数据行

  1. 为dataGridView添加ContextMenuStrip控件
  2. 为dataGridView控件添加行头双击事件,绑定右键菜单
  3. 右键菜单【删除】按钮;首先指定删库操作,若成功,就删除删除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 参考文献:

  1. C# winform treeview添加右键菜单并选中节点
  2. C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
  3. C#编程学习(20):对比两个mdb文件的图层包含的要素数目是否一致
  4. c# dataGridView与access数据库及其增删查改导出报表等

更多精彩欢迎关注【运筹优化与图像处理算法编程】公众号

C#编程学习35:对MDB数据库的操作相关推荐

  1. shell脚本编程学习笔记(四)shell操作数据库

    一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构: ...

  2. Java -- JDBC 学习--通过Statement进行数据库更新操作

    通过 JDBC 向指定的数据表中插入一条记录. 1. Statement: 用于执行 SQL 语句的对象 1). 通过 Connection 的 createStatement() 方法来获取 2). ...

  3. MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)...

    (01) 连接数据库 mysql -uroot -p 之后输入密码 ******.(由于我的密码设置的是111,所以输入的是111) (02) 退出数据库 exit (03) 查看数据库 show d ...

  4. tp5.0 mysql_《TP5.0学习笔记---对Mysql数据库的操作(一)》

    一.连接数据库 在ThinkPHP框架中,它为我们提供了非常方便的方式连接数据库,我们可以通过简单的修改配置文件就可以连接上我们的mysql/oracle/SQL Server. 在我们的PHP中,大 ...

  5. 【web学习之Mysql】数据库-----查询操作------大全

    1.选择特定的字段 select pass,id from user where id=3; sql语言中"="和"=="是一样的 2.给字段取别名-as se ...

  6. C# 创建MDB数据库、并存放表格数据的案例

    下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,这是一个类,用完之后记得用Close()方法. ...

  7. C#创建MDB数据库、并存放表格数据

    下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,,,这是一个类,用完之后记得用Close()方 ...

  8. C#编程学习51:操作MDB数据库

    首先导入需要的命名空间 using System.Data.OleDb; 然后在界面上添加dataGridView控件和相关按钮 功能点1:将数据库中的数据显示在界面的dataGridView控件上 ...

  9. java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档

    java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档 java计算机毕业设计智友少儿编程学习平台源码+mysql数据库+系统+部署+lw文档 本源码技术栈: 项目架构 ...

最新文章

  1. 代码之谜(零)- 开篇/前言/序
  2. 利用poi进行数据的excel导出
  3. windows环境下nginx的入门配置跳转tomcat
  4. poj3190 区间贪心 挑战程序设计竞赛
  5. MVC系列学习(十五)-验证码
  6. cmmi写文档工作教训
  7. 来自一个用户的体验-Alpha项目测试
  8. JavaWeb之得到web应用中的资源文件
  9. 如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
  10. 三星固态硬盘linux驱动,三星850evo固态硬盘驱动程序官方版
  11. 【刷题】清橙 A1339 JZPLCM(顾昱洲)
  12. 【计算机毕业设计】java+mysql基于SSM的生鲜超市进销存管理系统
  13. pycharm远程连接服务器完整教程
  14. 计算机卸载一个程序正确操作,电脑这两个操作要学会,两种卸载软件的方法,保证电脑系统稳定...
  15. C语言及ARM中堆栈指针SP设置的理解与总结
  16. 0x80070002(0x80070002错误代码怎么解决)
  17. 发现答案茶,真的不一样
  18. ubuntu自动挂载smba服务器
  19. 3万字英国留学生Java后台面经,中offer率5/7 精
  20. 5G基本概念及其发展概况

热门文章

  1. arduino使用oled代码_Arduino提高篇14—摇杆按键操作OLED
  2. Casinos and travel[智力和快速幂]
  3. Fibonacci数列 Huffman树
  4. 别看唐探了,Q(ueue)的真相在这里
  5. 教学中利用计算机软件,计算机软件应用类课程教学方法探讨
  6. C#.net 地图控件开发(七) 地图符号,几何图形样式Symbol
  7. SMS短信中英文混合编码
  8. python练手(PyAutoGUI)
  9. cf不显示前往回归服务器,《CF》回归服务器奖励一览
  10. 三菱Q系列CC_LINK远程设备站(模拟量)的应用