目录
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 参考文献:
using System.Data.OleDb;
控件准备:两个TextBox、一个按钮、一个comboBox
///
/// 根据指定的mdb文件获取其中的表格数据
///
/// MDB文件路径
///
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;
}
///
/// 根据从mdb中读取的table,获取所有Table的名称
///
/// mdb文件路径
///
public List getAllTableName(string mdbPath)
{
List AllTableName = new List();
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;
}
///
/// 从给定的mdb中获取指定名称数据表的内容,将其返回到DataTable表中
///
/// mdb名称
/// 数据表名称
/// 返回数据表的内容
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];
}
首先向要添加气泡的文本框内拖拽一个【toolTip】控件
添加鼠标驻留事件,这里让鼠标驻留之后,显示文本框的文本内容
//鼠标驻留要进行的操作
private void textBox2_MouseHover(object sender, EventArgs e)
{
toolTip1.IsBalloon = true;
toolTip1.SetToolTip(this.textBox2, this.textBox2.Text);
}
///
/// 提取mdb文件中的数据
///
///
///
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 tableNames = getAllTableName(textBox2.Text);
foreach (string tableName in tableNames)
{
//textBox1.AppendText(tableName + "\t\r\n");
comboBoxTable.Items.Add(tableName);
}
//设置comboBox的默认值
comboBoxTable.SelectedIndex = 0;
}
///
/// 当comboBox控件的值发生变化时,打印出对应表格的数据项
///
///
///
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");
}
}
将comboBox改成树视图同时使用DataGridView进行数据展示
打开按钮源码
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 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();
}
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("请先选择一行数据", "提示信息");
}
}
后续将考虑使用DataGridView,进行数据增删改等编辑操作
更多精彩欢迎关注【运筹优化与图像处理算法编程】公众号