OracleConnection conn = new OracleConnection(ConnectionString);
 DataSet ds=new DataSet();
 OracleDataAdapter oda = new OracleDataAdapter(null,conn);
 oda.SelectCommand.CommandText="select a from a@a1 union select a from a@a2 union select a from a@a3";
 oda.Fill(ds,"表名1");
 oda.SelectCommand.CommandText="select b from b@a1 union select b from b@a2 union select b from b@a3";
 oda.Fill(ds,"表名2");
 oda.SelectCommand.CommandText="select 3...";
 oda.Fill(ds,"表名3");
 oda.SelectCommand.CommandText="select 4...";
 oda.Fill(ds,"表名4");
 GridView1.DataSource = ds.Tables["表名1"];
 GridView1.DataBind();
 GridView1.DataSource = ds.Tables["表名2"];
 GridView1.DataBind();
 GridView1.DataSource = ds.Tables["表名3"];
 GridView1.DataBind();
 GridView1.DataSource = ds.Tables["表名4"];
 GridView1.DataBind();
以上有4个查询都用到多个database link(a1,a2,a3).网上有说法是如果用到dblink,即使是select 也要commit.有的是说会锁表,有的说是会open cursor too many错误,反正应该是要commit一下好。如果是通过db link查询远程数据库的数据,默认会初始化一个事务,仍然有必要要commit.
楼上说的对,在dblink的情况下,如果没有commit,可能会造成ora-1000错误,open cursor too many.
.
现在我的问题是,我这个commit如何提交?(VS2008+oracle11g)

解决方案 »

  1.   


    SqlConnection   sqlConnection   =   new   SqlConnection();   
      ...初始化连接   
      //   开启事务   
      SqlTransaction   sqlTransaction   =   sqlConnection.BeginTransaction();   
      //   将事务应用于Command   
      SqlCommand   sqlCommand   =   new   SqlCommand();   
      sqlCommand.Connection   =   sqlConnection;   
      sqlCommand.Transaction   =   sqlTransaction;     
      try   
      {   
      //   利用sqlcommand进行数据操作   
      ...   
      //   成功提交   
      sqlTransaction.Commit();   
      }   
      catch(Exception   ex)   
      {   
      //   出错回滚   
      sqlTransaction.Rollback();   
      }   下面这句话 是开启事物的  你去查查c#事物就行了  SqlTransaction   sqlTransaction   =   sqlConnection.BeginTransaction();