日期:2014-05-18  浏览次数:20894 次

OleDbDataAdapter.update问题
在使用OleDbDataAdapter.update时候出现了一些问题,向各位大侠求助!
问题描述:对数据库进行修改或添加,当表中没有记录时,添加一行;当表中有记录时候,将第一行记录数据修改.问题出现在当表中已有记录时候,提醒OleDbDataAdapter.update出错,出错信息为"对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。"
涉及代码如下,请高手指教!  
  private void button1_Click(object sender, EventArgs e)
  {
  if (ProNameTxt.Text == "" || comboBox1.Text == "") MessageBox.Show("请输入完整信息!");
  else
  {
  string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\work\temp.mdb";
  OleDbConnection myConn = new OleDbConnection(strCon);
  DataSet myDataSet = new DataSet();
  string strCom = "SELECT * FROM 工程系统参数表";
  OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strCom, myConn);
  OleDbCommandBuilder builder = new OleDbCommandBuilder(MyAdapter);
  myConn.Open();
  MyAdapter.Fill(myDataSet, "项目基本信息表");
  if (myDataSet.Tables["项目基本信息表"].Rows.Count >0)
  {
  myDataSet.Tables["项目基本信息表"].Rows[0][0] = ProNameTxt.Text;
  myDataSet.Tables["项目基本信息表"].Rows[0][1] = comboBox1.Text;
  myDataSet.Tables["项目基本信息表"].Rows[0][2] = Convert.ToDouble(textBox1.Text) / 100;
  MessageBox.Show(myDataSet.Tables["项目基本信息表"].Rows[0][0].ToString());
  }
  else
  {
  DataRow mydatarow = myDataSet.Tables["项目基本信息表"].NewRow();
  mydatarow[0] = ProNameTxt.Text;
  mydatarow[1] = comboBox1.Text;
  mydatarow[2] = Convert.ToDouble(textBox1.Text) / 100;
  myDataSet.Tables["项目基本信息表"].Rows.Add(mydatarow);
  }
  MyAdapter.Update(myDataSet,"项目基本信息表"); //出错行
  myConn.Close();
  }
  }

------解决方案--------------------
数据库需要建主键
------解决方案--------------------
\work\temp.mdb 中的 工程系统参数表 没有设置主键