日期:2014-05-18  浏览次数:20894 次

请教关于comboBox 显示 access 数据库 表名的问题
请教各位,我在winform中添加一个comboBox1,想使其下拉列表显示现有的ACCESS数据库db1.mdb的所有创建表的表名。选择后,已创建的 datagridview1 显示相应选择的数据库内容。求实现方法......

------解决方案--------------------
创建表的表名
select [Name] from MSysObjects where type=1
查询出来绑定即可
------解决方案--------------------
datagridview1 在里面有个绑定选项 绑定你要查询的列

用select 列名 from 表名 where 加条件查询
查询出来绑定的值 实现动态添加
------解决方案--------------------
Access2003
工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象
工具 -> 安全 -> 用户与组的权限->选择MSysObjects->勾选读取数据
Access2007
Office按钮->Access选项->当前数据库->导航选项->勾选显示系统对象->
数据库工具->用户和权限->用户与组权限->对象名称->选择MSysObjects->勾选读取数据
C# code

       //将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();
            }
        }

------解决方案--------------------
Access2003
工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象
工具 -> 安全 -> 用户与组的权限->选择MSysObjects->勾选读取数据
Access2007
Office按钮->Access选项->当前数据库->导航选项->勾选显示系统对象->
数据库工具->用户和权限->用户与组权限->对象名称->选择MSysObjects->勾选读取数据
这点很重要,要不然是取不到的,这个东西我做过,然后再用3楼的方法可以的
------解决方案--------------------
获取所有表压根不需要那么复杂,你可以参考下:
http://blog.163.com/ysli_195/blog/static/4205419420111022433475/

这样得到的就是表信息就存放在datatable里