public OleDbDataAdapter da;
public OleDbConnection conn;
public DataSet ds;
public DataRow dr;
private void ShowData()
        {
            conn = new OleDbConnection("provider=Microsoft.Jet.OleDb.4.0;Data Source=student.mdb");
            string sql = "select * from 第一学期";
            da = new OleDbDataAdapter(sql, conn);
            ds = new DataSet();
            da.Fill(ds, "第一学期");        }private void f3_xg_Click(object sender, EventArgs e)
        {
            
            ShowData();
            
            ds.Tables["第一学期"].PrimaryKey = new DataColumn[] { ds.Tables["第一学期"].Columns["学号"] };
            dr = ds.Tables["第一学期"].Rows.Find(f3_num.Text);            dr["姓名"] = f3_name.Text;
            dr["学号"] = f3_num.Text;
            dr["毛泽东思想邓小平理论"] = Convert.ToInt32(f3_kck_t1.Text);
            dr["形势与政策"] = Convert.ToInt32(f3_kck_t2.Text);
            dr["实用英语"] = Convert.ToInt32(f3_kck_t3.Text);
            dr["计算机数学"] = Convert.ToInt32(f3_kck_t4.Text);
            dr["劳动"] = Convert.ToInt32(f3_kck_t5.Text);            dr["课程设计"] = Convert.ToInt32(f3_ksk_t1.Text);
            dr["ACCESS数据库"] = Convert.ToInt32(f3_ksk_t2.Text);
            dr["网页设计技术"] = Convert.ToInt32(f3_ksk_t3.Text);
            dr["数据结构"] = Convert.ToInt32(f3_ksk_t4.Text);
            dr["组成原理与汇编语言"] = Convert.ToInt32(f3_ksk_t5.Text);            da.SelectCommand = new OleDbCommand("select * from 第一学期", conn);
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
            //da.InsertCommand = cb.GetInsertCommand();
            //da.DeleteCommand = cb.GetDeleteCommand();
            da.UpdateCommand = cb.GetUpdateCommand();
            //dr = ds.Tables["第一学期"].Rows[];
            
            //da.Update(ds,"第一学期");
            try
            {
                da.Update(ds, "第一学期");
                ds.AcceptChanges();
                MessageBox.Show("更新成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("更新出错!错误原因为:\n" + ex.Message + "\n");
            }
            
        }
    }
之后显示的错误是:对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。
希望高手能详细点明原因!

解决方案 »

  1.   

    数据库字段最好别用汉语
    最好用ado方式。
    这两句话有问题:
    da.SelectCommand = new OleDbCommand("select * from 第一学期", conn); 
                OleDbCommandBuilder cb = new OleDbCommandBuilder(da); 
      

  2.   

    都有的ds.Tables["第一学期"].PrimaryKey = new DataColumn[] { ds.Tables["第一学期"].Columns["学号"] }; 
    已经给定了主键,是不是UpdateCommand一定要写SQL更新语句的,不是已经自动生成的吗?
      

  3.   

    如果你的表没有主键的话,不会自动生成update等命令。
      

  4.   

    你的selectcommand是不是没返回任何查询信息哦?  你试下在数据库里执行下sql语句呢?
      

  5.   

    if (textBox1.Text.Trim() == dr["admin"].ToString() & textBox2.Text.Trim() == dr["pwd"].ToString() & comboBox1.SelectedItem == "班干部")
    这段代码有问题不?我做的一个登陆框里就是这里出问题,说什么未讲对象设置实例化,是不是因为里面没有主键的信息啊?