OleDbConnection conn1 = new OleDbConnection();
conn1.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\hndm.dbf\"";
OleDbDataAdapter da1 = new OleDbDataAdapter("select dwdm1,dwdm2,dwdm3,dwdm4,dwmq4,dwdm5,dwmq5 from hndm",conn1); OleDbConnection conn2 = new OleDbConnection();
conn2.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\conxbkp.dbf\"";
OleDbDataAdapter da2 = new OleDbDataAdapter("select xbid,a1,a2,a3,a4,a5,a6,a63,a64,lydm from conxbkp",conn2); OleDbConnection conn3 = new OleDbConnection();
conn3.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\lydm.dbf\"";
OleDbDataAdapter da3 = new OleDbDataAdapter("select lydm,lymq from lydm",conn3); DataSet ds = new DataSet();
ds.EnforceConstraints = false;
da1.Fill(ds,"hndm");
da2.FillSchema(ds,SchemaType.Source,"conxbkp");
da2.Fill(ds,"conxbkp");
da3.Fill(ds,"lydm"); //设置乡村代码库与小班库的父子关系,为一对多关系(多字段关联)
DataColumn[] parent = new DataColumn[2]{ds.Tables["hndm"].Columns["dwmq4"],ds.Tables["hndm"].Columns["dwmq5"]};
DataColumn[] child = new DataColumn[2]{ds.Tables["conxbkp"].Columns["a2"],ds.Tables["conxbkp"].Columns["a4"]};
DataRelation dr = ds.Relations.Add("hndmxbkp",parent,child);

//设置流域代码库与小班库的父子关系,为一对多关系(单字段关联)
DataRelation dr2 = ds.Relations.Add("lydmxbkp",ds.Tables["lydm"].Columns["lymq"],ds.Tables["conxbkp"].Columns["a4"]);

//修改小班库记录。
foreach (DataRow parentRow in dr.ParentTable.Rows)
{
foreach(DataRow childRow in parentRow.GetChildRows("hndmxbkp"))
{
//MessageBox.Show(childRow["a2"] + " " + parentRow["dwmq4"]);

//更改乡、村代码及设置林班号为000
childRow["a1"] = parentRow["dwdm4"];
childRow["a3"] = parentRow["dwdm5"];
childRow["a5"] = "000";
//更改小班ID号
childRow["xbid"] = parentRow["dwdm1"].ToString() + parentRow["dwdm2"].ToString() + parentRow["dwdm3"].ToString() + childRow["a1"].ToString() + childRow["a3"].ToString() + childRow["a5"].ToString() + childRow["a6"].ToString();
//更改流域代码
}
} dg.DataSource = ds;
dg.DataMember = "hndm.hndmxbkp"; dg2.DataSource = ds;
dg2.DataMember = dr.ParentTable.ToString();                            OleDbCommandBuilder db = new OleDbCommandBuilder (da2);
da2.Update(ds,"conxbkp");

解决方案 »

  1.   

    哈哈,我也卡在这,我不懂FoxPro数据库啊,主要能在你的表中设好一个键值就行了.然后再Select语句中包含这个键值
      

  2.   

    ADO.NET的数据库更新要求包含键值,还有我想问,怎么注册VFPOLEDB.1
      

  3.   

    使用Commandbuilder的时候要有主键
      

  4.   

    具体怎么操作啊,我的数据库有主键(xbid),没有更新SQL,想利用Commandbuilder自动创建,但是不行啊。注册VFPOLEDB.1只须下载一个驱动装上便可。
      

  5.   

    帮你顶一下,这个问题我很早就问了。可还是没有解决,我也看了MSDN,把它们的例子考下来也不行,不知那里出了问题。
    解决后告诉我一下好吗?[email protected]或CSDN短信。
    谢谢
      

  6.   

    http://community.csdn.net/Expert/topic/3232/3232264.xml?temp=.6202204
      

  7.   

    我将代码修改了一下,不再提示错误,但数据还是没有更新:
    OleDbConnection conn1 = new OleDbConnection();
    conn1.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\hndm.dbf\"";
    OleDbDataAdapter da1 = new OleDbDataAdapter("select dwdm1,dwdm2,dwdm3,dwdm4,dwmq4,dwdm5,dwmq5 from hndm",conn1); OleDbConnection conn2 = new OleDbConnection();
    conn2.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\conxbkp.dbf\"";
    OleDbDataAdapter da2 = new OleDbDataAdapter("select xbid,a1,a2,a3,a4,a5,a6,a63,a64,lydm from conxbkp",conn2);
    //OleDbCommandBuilder cb = new OleDbCommandBuilder (da2);
    //da2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    //新增修改部分
    da2.UpdateCommand= new OleDbCommand("update conxbkp set a1=?,a2=?,a3=?,a4=?,a5=?,a6=?,a63=?,a64=?,lydm=? where (xbid=?)");
    da2.UpdateCommand.Parameters.Add("@a1",OleDbType.VarChar,3,"a1");
    da2.UpdateCommand.Parameters.Add("@a2",OleDbType.VarChar,18,"a2");
    da2.UpdateCommand.Parameters.Add("@a3",OleDbType.VarChar,3,"a3");
    da2.UpdateCommand.Parameters.Add("@a4",OleDbType.VarChar,20,"a4");
    da2.UpdateCommand.Parameters.Add("@a5",OleDbType.VarChar,3,"a5");
    da2.UpdateCommand.Parameters.Add("@a6",OleDbType.Decimal,4,"a6");
    da2.UpdateCommand.Parameters.Add("@a63",OleDbType.VarChar,8,"a63");
    da2.UpdateCommand.Parameters.Add("@a64",OleDbType.VarChar,12,"a64");
    da2.UpdateCommand.Parameters.Add("@lydm",OleDbType.VarChar,8,"lydm");
    OleDbParameter xbkpParam = da2.UpdateCommand.Parameters.Add("@xbid",OleDbType.VarChar,19,"xbid");
    xbkpParam.SourceVersion = DataRowVersion.Original;
    da2.UpdateCommand.Connection = conn2; OleDbConnection conn3 = new OleDbConnection();
    conn3.ConnectionString="Provider=\"VFPOLEDB.1\";Data Source=\"" + this.getPath() + "\\lydm.dbf\"";
    OleDbDataAdapter da3 = new OleDbDataAdapter("select lydm,lymq from lydm",conn3); DataSet ds = new DataSet();
    ds.EnforceConstraints = false;
    da1.Fill(ds,"hndm");
    //da2.FillSchema(ds,SchemaType.Source,"conxbkp");
    da2.Fill(ds,"conxbkp");
    da3.Fill(ds,"lydm"); //设置乡村代码库与小班库的父子关系,为一对多关系(多字段关联)
    DataColumn[] parent = new DataColumn[2]{ds.Tables["hndm"].Columns["dwmq4"],ds.Tables["hndm"].Columns["dwmq5"]};
    DataColumn[] child = new DataColumn[2]{ds.Tables["conxbkp"].Columns["a2"],ds.Tables["conxbkp"].Columns["a4"]};
    DataRelation dr = ds.Relations.Add("hndmxbkp",parent,child);

    //设置流域代码库与小班库的父子关系,为一对多关系(单字段关联)
    DataRelation dr2 = ds.Relations.Add("lydmxbkp",ds.Tables["lydm"].Columns["lymq"],ds.Tables["conxbkp"].Columns["a4"]);

    //修改小班库记录。
    foreach (DataRow parentRow in dr.ParentTable.Rows)
    {
    foreach(DataRow childRow in parentRow.GetChildRows("hndmxbkp"))
    {
    //MessageBox.Show(childRow["a2"] + " " + parentRow["dwmq4"]);

    //更改乡、村代码及设置林班号为000
    childRow["a1"] = parentRow["dwdm4"];
    childRow["a3"] = parentRow["dwdm5"];
    childRow["a5"] = "000";
    //更改小班ID号
    childRow["xbid"] = parentRow["dwdm1"].ToString() + parentRow["dwdm2"].ToString() + parentRow["dwdm3"].ToString() + childRow["a1"].ToString() + childRow["a3"].ToString() + childRow["a5"].ToString() + childRow["a6"].ToString();
    //更改流域代码
    }
    } dg.DataSource = ds;
    dg.DataMember = "hndm.hndmxbkp"; dg2.DataSource = ds;
    dg2.DataMember = dr.ParentTable.ToString(); da2.Update(ds,"conxbkp");
    上面的兄弟,下载请到微软的VFP主站有其ODBC驱动下载。
      

  8.   

    有主键就好办,把主键包含在Select语句中
      

  9.   

    有主键也没用,不知道和驱动有关系没?
    我用的是oracle provider for oledb
    不知道搂住解决了这个问题没?
      

  10.   

    access数据库哪里来的主键啊,所有大侠们,没有主键怎么更新呢????