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

  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数据库及其增删查改导出报表等

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

 

 

 

 

 

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值