public void DataBaseDelete(string FieldName, string FieldValue, string DataTableName)
        {
            if (this.OleDbCommandString != null && this.ConnectionString != null)
            {
                MyConnection = new OleDbConnection(_ConnectionString);
                MyDataAdapter = new OleDbDataAdapter(_OleDbCommandString, MyConnection);                MyDataSet = new DataSet();
                MyDataAdapter.Fill(MyDataSet, DataTableName);
             
                MyDataTable = MyDataSet.Tables[DataTableName];
                DataRow[] Dr = MyDataTable.Select(FieldName + "=" + FieldValue);
                if (Dr.Length > 0)
                {
                    foreach (DataRow Dr1 in Dr)
                    {
                        MyDataTable.Rows.Remove(Dr1);
                    }
                }
                try
                {
                    
                    MyDataAdapter.Update(MyDataSet, DataTableName);
                }
                catch (Exception Err)
                {
                    MessageBox.Show(Err.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }            }
            else
            {
                MessageBox.Show("您没有设置OleDbCommandString和ConnectionString属性", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }我设置断点调试,DataTable中的删除了,但是往数据库更新不了啊,是不是缺少什么啊c#数据库DataTable

解决方案 »

  1.   

    不能用Remove,那个不是删除,是直接移除,删除必须调用DataRow的Delete方法
      

  2.   

    哦,这样啊,非常感谢啊,这个需不需要DeleteCommand?
    还有我更新的时候不使用DeleteCommand,是不是必须要CommandBuilder
      

  3.   

    MyDataTable.Rows.Remove 是移除MyDataTable表的数据而对数据库没影响;要想对数据库操作就要执行对应的SQL语句
      

  4.   

    OK,明白,想问一下,是不是只要想修改数据库必须要用SQL语句,如果使用DataTable的更改来更新数据库的话,同样也要使用SQL语句,是不是可以通过CommandBuilder来自动生成SQL语句,也可以用DataAdapter的四个Command来手动添加啊
      

  5.   

    用CommandBuilder能自动生成SQL语句吗?好久没用过CommandBuilder,不清楚!!
      

  6.   

    额,那你一般是不是用SQL语句来更新啊
      

  7.   

    可以自动生成SQL语句,不过我一般不会这么做,因为你编写代码的时候看不到生成的语句,万一语句有问题,你根本无从知晓。可以直接在查询管理器里面,鼠标右键点击表名,让它帮你创建插入、更新、删除语句,之后微调,复制到C#里面赋值给Command。如果那个语句含有不少不规范的字符,没关系,写个正则批量替换下即可,我就写过一个正则,需要的话,表达式可以给你。
      

  8.   

    哦,这个我知道,我还以为你说CommandBuilder自己有生成sql语句;VS好多控件都能直接通过点击来连接数据库,不过这个自己生成的会有很多不需要的代码,我通常都是自己写,有问题也好调
      

  9.   

    DataTable是缓存在内存里面的,你删除他当然没有删除数据库里面的东西了
    在应该是删除DataTable的方法里面用ado.net删除数据库里面的数据之后,重新绑定数据
      

  10.   


    还要重新绑定?怎么绑定啊,用DataAdapter.Fill()方法吗
      

  11.   


    你删除的只是内存中的,具体需要操作数据库,那还要写sql语句进行操作。
      

  12.   

    直接sql语句删除
            public int SetData(string StrSql) 
            {
                int res = -1;
                try 
                {
                    SqlOleCon.Open();
                    SqlOleCmd = new OleDbCommand(StrSql, SqlOleCon);
                    SqlOleCmd.ExecuteNonQuery();
                    SqlOleCon.Close();
                    res = 0;
                }
                catch(Exception er)
                {
                    SqlOleCon.Close();
                }
                return res;
            }
      

  13.   

             //数据更新到数据库SqlDataAdapter sda =new SqlDataAdapter();
              SqlCommandBuilder  scb = new SqlCommandBuilder(sda);
                sda.Update(ds);
    用SqlDataAdapter这个类的对象的Update方法就可以更新到数据库了