我是个新手。
请大家 帮忙指点。程序的目的:
从interbase库中查询出记录,插入另一台服务器的oracle库中,要求使用dataset。现在程序显示“插入成功!”catch(Exception)没有异常,但是oracle库中没有新增记录。求大家 帮忙指点。
先谢了!string Connstr1 = "interbase连接字符串";
Borland.Data.Provider.BdpConnection conn1 = new Borland.Data.Provider.BdpConnection(Connstr1);
conn1.Open();
string sql1 = "Select * from KUANG_XYTZ1 where CHECI=2";
Borland.Data.Provider.BdpDataAdapter adapter1 = new Borland.Data.Provider.BdpDataAdapter(sql1,conn1);
System.Data.DataSet ds1 = new DataSet();
adapter1.Fill(ds1,"KUANG_XYTZ1");
conn1.Close();string Connstr = "oracle连接字符串";
System.Data.OracleClient.OracleConnection conn = new OracleConnection(Connstr);
conn.Open();
System.Data.OracleClient.OracleDataAdapter adapter = new OracleDataAdapter("",conn);
adapter.SelectCommand.CommandText = "Select * from ORACLE_XYTZ";
System.Data.OracleClient.OracleCommandBuilder builder = new OracleCommandBuilder(adapter);
System.Data.DataSet ds = new DataSet();
adapter.Fill(ds,"ORACLE_XYTZ");
DataTable table = ds.Tables["ORACLE_XYTZ"];
ds.Merge(ds1);
adapter.Update(table);
conn.Close();

解决方案 »

  1.   

    插入时没有这么用过,一直都是用sql语句来进行插入
      

  2.   

    DataRow有一个属性,标志本行数据的编辑情况,好像是RowState,Update方法是根据这个属性来更新数据的,只有这个属性是add的才会被插入。所以你只能再构建一个DataTable,用循环添加新行,并把IB查出的数据写入新行,然后更新就行了。
      

  3.   

    谢谢panjf(Troj),我试试。interbase和oracle都设主键了。
      

  4.   

    merge的方法 行不通了吗?哪位大哥 帮写下代码,
    着急 都乱了。
      

  5.   

    merge的方法不可能,因为这样不能无法变更RowState属性。
      

  6.   

    panjf(Troj)大哥,给你短信了 请接收。
      

  7.   

    DataTable dt1, dt2;
    //假设dt1是IB的,dt2是Oracle的,两个DataTable的获取方法你写的那段就行。
    foreath(DataRow dr in dt1.Rows)
    {
      DataRow newdr = dt2.NewRow();
      newdr["col1"] = dr["col1"];
      ...
      dt2.Rows.Add(newdr);
    }
    adapter.Update(dt2);
      

  8.   

    对于oracle的conn,是不是考虑在添加一条conn.commit()呢?
    好象oracle的conn需要commit才能真正修改数据库
      

  9.   

    谢谢楼上大哥的指点,我会考虑的。要给panjf(Troj) 大哥分了。