using System.Data.OleDb;            DataSet ds = new DataSet();            OleDbConnection odconn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=northwind.mdb");
            odconn.Open();            //得到数据库中所有的表。
            DataTable dt = odconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            foreach (DataRow item in dt.Rows)
            {
                string querycmd = "select * from [" + item["TABLE_NAME"].ToString() + "]";
                OleDbDataAdapter oleda = new OleDbDataAdapter(querycmd, odconn);
                oleda.Fill(ds, item["TABLE_NAME"].ToString());
            }            MessageBox.Show(ds.Tables.Count.ToString());
            //dataGridView1.DataSource = ds.Tables["Categories"];            ds.Tables.Clear();
            ds.AcceptChanges(); //我想清除数据库中所有的表,为什么这样不行呢?
            MessageBox.Show(ds.Tables.Count.ToString());
问题:想清除数据库MDB中所有的表或者某一指定的表,并将它更新到数据库mdb文件中; 还有一个问题:如何在表中加入/删除一列,并将它更新到数据库mdb文件中。

解决方案 »

  1.   

    using(OleDbConnection odconn = new OleDbConnection(@""))
    {
    odconn.Open();
    OleDbDataAdapter odda = new OleDbDataAdapter("drop   table   yourtablename", odconn);}
      

  2.   

    因为它加载的是提交自加载此DataSet,或者上次调用DataSet.AcceptChanges()以来对其进行的所有更改。你的代码是向DataSet中添加了一个表,虽然你后面清空了,但是当调用ds.AcceptChanges()时,它会还原成以前曾经修改过的DataSet.也就是说,你做了画蛇添足的事啦。
      

  3.   

    ALTER TABLE table tablename    ADD [COLUMN] column type   // 新增一列
      

  4.   

    这个ADO.NET我也学了一点,好像你后面都没有用DataBind()绑定,最好自己也要写一个绑定方法,然后每执行一次操作就调用一次添加列:string strSql   =   "alter   table   table1   add   desc1   text(200) "; 
    删除列不清楚……
      

  5.   


            // 执行SQL命令
            public bool ExeSql(string sSQl)
            {
                try
                {
                    if (_oleConn.State != ConnectionState.Open)
                        _oleConn.Open();
                    
                    OleDbCommand cmd = new OleDbCommand(sSQl, _oleConn);                cmd.ExecuteNonQuery();
                    return true;
                }
                catch (Exception err)
                {
                    throw new Exception("执行SQL命令失败. 失败原因: " + err.Message);
                }
            }
      

  6.   

    我刚试了下你的代码,你的代码可以删除DataSet里的所有的表,但是要删除数据库中的表,你可以通过Sql语句的drop table 表明的方法删除,也不知道你到底要删除的是DataSet里的所有的表还是数据库中指定的表
      

  7.   

    OLEDB 
    是删除数据库MDB中的表,而不是DATSET中的表。
    在数据库MDB中新建/删除 表;
    在数据库MDB中新建/删除 列;
      

  8.   

    //清除表格
                 //DROP TABLE "表格名"
                 OleDbConnection sldb = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sldb.mdb");
                 try
                 {
                    sldb.Open();
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = sldb;
                    cmd.CommandText = "DROP TABLE Folder";//SQLCOMMAND语句
                    cmd.ExecuteNonQuery();//执行SQLCMMAD
                    MessageBox.Show("删除Folder表成功");
                 }
                 catch (Exception ex)
                 {
                    MessageBox.Show(Convert.ToString(ex.Message));
                 }
                 finally { sldb.Close(); sldb = null; }         }   

  9.   

    嗯 ,使用SQL ,楼上的都说了,比如alter table ;drop 啊什么的。
    我在想,MSDN中为什么没有这样的帮助说明呢?
    关于SQL 语句哪里有一个较全明的介绍
    谁能给个SQL 语句使用说明的连接。
      

  10.   

    private void AlertTableAddColumn()
             {
                 //ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
                 //在表Cars内增加一个字段,名字为Condition(状况),长度为10
                 OleDbConnection sldb = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sldb.mdb");
                 try
                 {
                    sldb.Open();
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = sldb;
                    cmd.CommandText = "ALTER TABLE Folder ADD COLUMN readme TEXT(255)";//SQLCOMMAND语句
                    cmd.ExecuteNonQuery();//执行SQLCMMAD
                    MessageBox.Show("Folder表中增加readme字段,文本型长度255");
                 }
                 catch (Exception ex)
                 {
                    MessageBox.Show(Convert.ToString(ex.Message));
                 }
                 finally { sldb.Close(); sldb = null; }         }   

  11.   

    SQL 必知必会(第3版) (2010 年度畅销榜NO.183 )
    这本书不错的,基础的sql。当然了,你看这里也可以:
    SQL 教程   

  12.   


    一个问题:            DataSet ds = new DataSet();            OleDbConnection odconn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=northwind.mdb");
                odconn.Open();            OleDbCommand oledbcom = new OleDbCommand();
                oledbcom.Connection = odconn;
                oledbcom.CommandText = "drop table Categories";
                ERROR:不能删除该索引或表。它可能是当前索引,或用于一个关系中。
    运行到了oledbcom.ExecuteNonQuery();时会出错。
    我看了一个帮助文档: ROP 语句从数据库中删除已存在的表,或从表中删除已存在的索引。说明
    必须先关闭表,然后才能删除此表或此表中的索引。
    在这里,我应该怎样处理,谁能说一下。
      

  13.   


                DataSet ds = new DataSet();            OleDbConnection odconn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=northwind.mdb");
                odconn.Open();            OleDbCommand oledbcom = new OleDbCommand();
                oledbcom.Connection = odconn;
                oledbcom.CommandText = "drop table Categories";
                oledbcom.ExecuteNonQuery();//不能删除该索引或表。它可能是当前索引,或用于一个关系中。
      

  14.   

    我也正在学习中。这些都是直接使用SQL的。完成数据库好像要必须更新。只删除DATASET好像不可以哦
      

  15.   

    你先这样!
    关闭掉数据集的约束检查
    DataSet.EnforceConstraints=false;