如题
代码如下
DataSet ds = new DataSet();
string strconn = "Provider=Microsoft.Jet.OleDb.4.0;"+"Data Source= " +filepath+dbname+ ";";
OleDbConnection connection = new OleDbConnection(strconn);
connection.Open(); try
{
string constr = " SELECT * FROM " + this.comboBox3.SelectedItem.ToString();
OleDbDataAdapter ad = new OleDbDataAdapter();
ad.SelectCommand = new OleDbCommand(constr, connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(ad); ad.Fill(ds, this.comboBox3.SelectedItem.ToString());
ad.Fill(ds, this.comboBox3.SelectedItem.ToString());
DataTable dt = ds.Tables[this.comboBox3.SelectedItem.ToString()];
dt.AcceptChanges();
ds.AcceptChanges();
ad.UpdateCommand = builder.GetUpdateCommand();
connection.Close();
ad.Update(ds, this.comboBox3.SelectedItem.ToString());
MessageBox.Show("Update Successfully!"); }
catch (Exception err)
{
MessageBox.Show(err.Message);
}
没有错误提示,就是数据库中数据不改变
谢谢

解决方案 »

  1.   

    dt.AcceptChanges();
    ds.AcceptChanges();
    这两行要放在ad.Update()之后~
      

  2.   

    楼主不明其原理~当应用程序调用 Update 方法时,DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性,并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。DataRow的RowState 属性是个只读属性,有系统自动管理,当对行数据进行增删修改操作时,行状态便会自动作标记,Update方法也就是根据这些标记才能获知要对数据库进行何种操作;但是,如果调用了AcceptChanges方法,所有行的DataRow属性都会标记为初始状态
      

  3.   

    楼主用更新,可全文却不见有对DataSet进行更新的操作,正确的代码格式如下:OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = new OleDbCommand(queryString, connection);
            OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);        connection.Open();        adapter.Fill(dataSet, tableName);
    *************************************************************************
            //一定要加上对于dataset进行更新的操作,比如说:
            //dataSet.Tables[talbeName].Rows[0]["Sno"]="1111111";
    *************************************************************************
            adapter.Update(dataSet, tableName);        connection.Close();
    如果你不对Dataset进行更新,试问又怎么对数据库进行更新呢...另外,还有一点就是你用CommandBuilder,表一定要有主键,不然用不了的...
      

  4.   

    按照2楼的改正,我把dt.AcceptChanges();
    ds.AcceptChanges();
    放在ad.Update()之后可是数据库的数值还是没有改动
      

  5.   

    用不用写上具体的updatecommand,
    比如我只对datagrid中“Para" 列作改动, 数据库表中有一个自动增长的主键id
    代码:
    ad.UpdateCommand = new OleDbCommand("UPDATE " + this.comboBox3.SelectedItem.ToString() + " SET Para = @a WHERE id = @b", connection);
    ad.UpdateCommand.Parameters.Add("@a",OleDbType.Double, 3, "Para");
    OleDbParameter parameter = ad.UpdateCommand.Parameters.Add("@b", OleDbType.Integer, 3, "id");
    parameter.SourceVersion = DataRowVersion.Original
      

  6.   

    楼主在UPDATE之前把connection给关了
    是这个原因吗
      

  7.   

    对了,忘了说了, 我把close放到最下面了,也不行
      

  8.   

    TO:用不用写上具体的updatecommand,因为你用的OleDbCommandBuilder,所有不用写具体的updateCommand,CommandBuilder会自动帮你处理的,但你必须保证一点,你的代码里面最起码应该有改变的操作吧...不然更新什么?怎么更新啊?
     adapter.Fill(dataSet, tableName);
    *************************************************************************
            //一定要加上对于dataset进行更新的操作,比如说:
            //dataSet.Tables[talbeName].Rows[0]["Sno"]="1111111";
    *************************************************************************
            adapter.Update(dataSet, tableName);
      

  9.   

    用户是在datagrid中改Para这个column的数据,你怎么知道他要盖那一行呢
    dataSet.Tables[talbeName].Rows[0]["Sno"]="1111111";
    只能用于特定某行的改动,
      

  10.   

    如果你这样,相当于是把datagridView中的值保存到数据库中,那你这样的代码当然实现不了...请查MSDN,以"更新数据库"检索一下,有很多方法,自己去看下吧...
      

  11.   

    修改,
    =============
    DataSet ds = new DataSet();
    string strconn = "Provider=Microsoft.Jet.OleDb.4.0;"+"Data Source= " +filepath+dbname+ ";";
    OleDbConnection connection = new OleDbConnection(strconn);
    connection.Open();try
    {
    string constr = " SELECT * FROM " + this.comboBox3.SelectedItem.ToString();
    OleDbDataAdapter ad = new OleDbDataAdapter();
    ad.SelectCommand = new OleDbCommand(constr, connection);
    OleDbCommandBuilder builder = new OleDbCommandBuilder(ad);ad.Fill(ds, this.comboBox3.SelectedItem.ToString());
    ad.Fill(ds, this.comboBox3.SelectedItem.ToString());
    DataTable dt = ds.Tables[this.comboBox3.SelectedItem.ToString()];ad.UpdateCommand = builder.GetUpdateCommand();
    connection.Close();
    ad.Update(ds, this.comboBox3.SelectedItem.ToString());
    dt.AcceptChanges();
    ds.AcceptChanges();
    MessageBox.Show("Update Successfully!");}
    catch (Exception err)
    {
    MessageBox.Show(err.Message);
    }