翻了一下以前的贴子,没有合适的答案,所以只好来重新问:我的程序如下:
    首先声明了一堆控件
         public System.Data.OleDb.OleDbConnection ole_con;
public System.Data.OleDb.OleDbDataAdapter ole_ada;
public System.Data.DataSet dataset1;
public System.Data.OleDb.OleDbCommandBuilder ole_com;然后写了一个函数,填充dataset
     private void button1_Click(object sender, System.EventArgs e)
     {
this.dataset1 = new DataSet ();
string constring = @"Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db1.mdb";
this.ole_con = new System.Data.OleDb.OleDbConnection (constring);
this.ole_ada = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM student", this.ole_con);
this.ole_ada.Fill(this.dataset1);      }至此都没有问题,数据成功的填充进去了,用datagrid显示出来了都然后就写了一个update的函数

     private void button2_Click(object sender, System.EventArgs e)
      {
this.dataset1.Tables[0].Rows[0]["grade"] = 0;
this.ole_com = new System.Data.OleDb.OleDbCommandBuilder (this.ole_ada);
this.ole_ada.Update(this.dataset1);//*****
       }这个时候在注释星号的那一句跳出异常。如下:
     "Syntax error (missing operator) in query expression '( (student ID = ?) AND ((? = 1 AND course ID IS NULL) OR (course ID = ?)) AND ((? = 1 AND grade IS NULL) OR (grade = ?)) )'."      哪位大牛能给解释一下?写了      这个程序中所有的关于数据库的代码都是自己写的,没有拖控件。。

解决方案 »

  1.   

    this.ole_com = new System.Data.OleDb.OleDbCommandBuilder (this.ole_ada);
    放在this.ole_ada.Fill(this.dataset1);前试试
      

  2.   

    用OleDbCommandBuilder通过selectComman自动构件更新语句updateCommand
    这样你就可以更新了;private void button1_Click(object sender, System.EventArgs e)
         {
    this.dataset1 = new DataSet ();
    string constring = @"Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db1.mdb";
    this.ole_con = new System.Data.OleDb.OleDbConnection (constring);
             this.ole_com = new System.Data.OleDb.OleDbCommandBuilder (this.ole_ada);
    this.ole_ada = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM student", this.ole_con);
    this.ole_ada.Fill(this.dataset1);      }
      

  3.   

    我就是用的commandbuilder ,上面写了。 。