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

为什么Myadapter.Fill(ds,"表1");不能把DATASET的数据增加到数据库里
string cnStr=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DB1.MDB";
  OleDbConnection cn = new OleDbConnection(cnStr);
  cn.Open();
  OleDbCommand cmd = new OleDbCommand("Select * From 表1", cn);
  OleDbDataAdapter Myadapter = new OleDbDataAdapter();
  //指定CMD命令对象
  Myadapter.SelectCommand = cmd;
  //命令生成器
  OleDbCommandBuilder cb = new OleDbCommandBuilder(Myadapter);
  DataSet ds = new DataSet();
  Myadapter.Fill(ds,"表1");  
  DataRow dr1 = ds.Tables["表1"].NewRow();
  dr1[0] = "1";
  dr1[1] = "2";
  dr1[2] = "3";
  dr1[3] = "4";
  ds.Tables["表1"].Rows.Add(dr1);

  Myadapter.Update(ds,"表1");
  cn.Close();
听说是没有设置主键,怎么设置主键?

------解决方案--------------------
数据库中的表的主键
------解决方案--------------------
数据库是用什么设计的!设下主键啊!上面代码中还是没有设置主键啊!!
workTable.PrimaryKey = new DataColumn[] {workTable.Columns["CustID"]};

// Or

DataColumn[] columns = new DataColumn[1];
columns[0] = workTable.Columns["CustID"];
workTable.PrimaryKey = columns;
这个是设主键的!!
------解决方案--------------------
你如果是在access里调试执行的,执行时能更新,关闭调试数据库就还原了。你执行可执行的程序就可以看到结果了。
------解决方案--------------------
我能不能把从XML里面读取的一个DATASET,通过Adapter一次插入到数据库里面去呢?
------解决方案--------------------
设置主键是指在数据库中设置主键 而非ls有人说的在DataSet中设置主键

设置主键的目的是为了在使用CommandBuilder自动生成sql语句时可以保证生成有效的sql语句,也就是说使用CommandBuilder来配合Adapter更新数据库时必须对与数据库表设置主键且主键信息包含在返回的数据集中。
------解决方案--------------------
可以了吗??如果不行.指定一下updatecommand试试!