请教关于comboBox 显示 access 数据库 表名的问题

xchjian012 2012-03-22 09:34:23
请教各位,我在winform中添加一个comboBox1,想使其下拉列表显示现有的ACCESS数据库db1.mdb的所有创建表的表名。选择后,已创建的 datagridview1 显示相应选择的数据库内容。求实现方法......
...全文
306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziyouli 2012-03-23
  • 打赏
  • 举报
回复
获取所有表压根不需要那么复杂,你可以参考下:
http://blog.163.com/ysli_195/blog/static/4205419420111022433475/

这样得到的就是表信息就存放在datatable里
  • 打赏
  • 举报
回复
Access2003
工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象
工具 -> 安全 -> 用户与组的权限->选择MSysObjects->勾选读取数据
Access2007
Office按钮->Access选项->当前数据库->导航选项->勾选显示系统对象->
数据库工具->用户和权限->用户与组权限->对象名称->选择MSysObjects->勾选读取数据

//将Access中的表名绑定到下拉框
private void Bind2ComboBox()
{
//Access2003连接字符串
string conStr = "Provider=Microsoft.Jet.OleDb.4.0;";
conStr += @"Data Source=D:\Assisment.mdb;";
conStr += "Jet OleDb:DataBase Password='123456';";
//创建数据库连接
OleDbConnection con = new OleDbConnection(conStr);
//查询access所有用户表名的查询语句
string sequal = "select id,name from MSysObjects where type=1 and flags = 0";
DataSet ds = new DataSet();
try
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, con);
oda.Fill(ds);
//将表名绑定到下拉框
this.comboBox1.DataSource = ds.Tables[0];
this.comboBox1.DisplayMember = "name";
this.comboBox1.ValueMember = "id";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
con.Close();
}
}

//下拉框选择变化事件
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string conStr = "Provider=Microsoft.Jet.OleDb.4.0;";
conStr += @"Data Source=D:\Assisment.mdb;";
conStr += "Jet OleDb:DataBase Password='123456';";
//创建数据库连接
OleDbConnection con = new OleDbConnection(conStr);
//解析下拉框选中的表名
string tableName = ((DataRowView)this.comboBox1.SelectedItem).Row.ItemArray[1].ToString();
//查询access所有用户表名的查询语句
string sequal = "select * from "+tableName+"";
DataSet ds = new DataSet();
try
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, con);
oda.Fill(ds);
//绑定表格
this.dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
con.Close();
}
}

参考地址:http://www.cnblogs.com/ghypnus/archive/2012/03/23/2412739.html
xchjian012 2012-03-23
  • 打赏
  • 举报
回复
需不需要在控件属性上做些什么呢
xchjian012 2012-03-23
  • 打赏
  • 举报
回复
代码如下,基本一模一样的
private void Bind2ComboBox()
{
string conStr = "Provider=Microsoft.Jet.OleDb.4.0";
conStr += @"Data Source=/db1.mdb;";
conStr += "Jet OleDb:DataBase Password=";
OleDbConnection con = new OleDbConnection(conStr);
string sequal = "select Id,Name from MSysObjects where type=1 and flags = 0";
DataSet ds = new DataSet();
try
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, con);
oda.Fill(ds);
this.comboBox1.DataSource = ds.Tables[0];
this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Id";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
con.Close();
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string conStr = "Provider=Microsoft.Jet.OleDb.4.0";
conStr += @"Data Source=/db1.mdb;";
conStr += "Jet OleDb:DataBase Password=";
OleDbConnection con = new OleDbConnection(conStr);
string tableName = ((DataRowView)this.comboBox1.SelectedItem).Row.ItemArray[1].ToString();
string sequal = "select * from " + tableName + "";
DataSet ds = new DataSet();
try
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, con);
oda.Fill(ds);
this.dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
con.Close();
}
}
xchjian012 2012-03-23
  • 打赏
  • 举报
回复
额....我确实勾选应用了啊....
mingcsharp 2012-03-23
  • 打赏
  • 举报
回复
Access2003
工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象
工具 -> 安全 -> 用户与组的权限->选择MSysObjects->勾选读取数据
Access2007
Office按钮->Access选项->当前数据库->导航选项->勾选显示系统对象->
数据库工具->用户和权限->用户与组权限->对象名称->选择MSysObjects->勾选读取数据
这点很重要,要不然是取不到的,这个东西我做过,然后再用3楼的方法可以的
xchjian012 2012-03-23
  • 打赏
  • 举报
回复
哥们,崇拜啊......我加了进去,运行成功,可没有效果,下拉列表啥都没有,我逐句运行了下,发现似乎没有运行到这里就弹出窗口进行交互操作了...
xchjian012 2012-03-23
  • 打赏
  • 举报
回复
感谢各位,终于显示出来了,悲催的选用了个点击事件,代码如下:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
String str = "./db1.mdb";
OleDbConnection OleDbcon = new OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=" + str + ";User ID=admin;Password=;Jet OLEDB:Database Password=");
string tableName = ((DataRowView)this.comboBox1.SelectedItem).Row.ItemArray[1].ToString();
string sequal = "select * from " + tableName + "";
DataSet ds = new DataSet();
try
{
OleDbcon.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, OleDbcon);
oda.Fill(ds);
this.dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
OleDbcon.Close();
}

}

private void comboBox1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
String str = "./db1.mdb";
OleDbConnection OleDbcon = new OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=" + str + ";User ID=admin;Password=;Jet OLEDB:Database Password=");
string sequal = "select Id,Name from MSysObjects where type=1 and flags = 0";
DataSet ds = new DataSet();
try
{
OleDbcon.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(sequal, OleDbcon);
oda.Fill(ds);
this.comboBox1.DataSource = ds.Tables[0];
this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Id";
}

finally
{
OleDbcon.Close();
}

}
小丢丢 2012-03-22
  • 打赏
  • 举报
回复
datagridview1 在里面有个绑定选项 绑定你要查询的列

用select 列名 from 表名 where 加条件查询
查询出来绑定的值 实现动态添加
EnForGrass 2012-03-22
  • 打赏
  • 举报
回复
创建表的表名
select [Name] from MSysObjects where type=1
查询出来绑定即可

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧