ActiveRecord切换数据库导数据

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
      <section name="mssqlserver" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
      <section name="oracle" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
      <section name="access" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />     
    </configSections>
  <mssqlserver>
    <config>
      <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
      <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
      <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
      <add key="hibernate.connection.connection_string" value="Data Source=200.200.200.20;Initial Catalog=FMEA;Integrated Security=SSPI" />
    </config>
  </mssqlserver>
  <oracle>
    <config>
      <add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
      <add key="hibernate.dialect" value="NHibernate.Dialect.OracleDialect" />
      <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
      <add key="hibernate.connection.connection_string" value="Data Source=Derating;User ID=system;Password=password;" />
    </config>
  </oracle>
  <access>
    <config>
      <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
      <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
      <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
      <add key="hibernate.connection.connection_string" value="Data Source=200.200.200.20;Initial Catalog=FMEA1;Integrated Security=SSPI" />
    </config>
  </access>
</configuration>

 IConfigurationSource source1 = System.Configuration.ConfigurationManager.GetSection("mssqlserver") as IConfigurationSource;

            IConfigurationSource source2 = System.Configuration.ConfigurationManager.GetSection("access") as IConfigurationSource;
            //开启日志
            //log4net.Config.XmlConfigurator.Configure();
            Assembly assembly = Assembly.Load(@"DBChange");
            ActiveRecordStarter.Initialize(assembly, source1);   
           
       
        //////////////////////////////// 更改数据库////////////////////////////////////////////////////
            ///// TABLE2 是Table1的子表
           
           
            List<TABLE1> listTable1 = new List<TABLE1>(TABLE1.FindAll());

           
            //List<TABLE2> listTable2 = new List<TABLE2>(TABLE2.FindAll());
           
            ActiveRecordStarter.ResetInitializationFlag();

            IConfigurationSource source2 = System.Configuration.ConfigurationManager.GetSection("access") as IConfigurationSource;
            //开启日志
            //log4net.Config.XmlConfigurator.Configure();
            Assembly assembly = Assembly.Load(@"DBChange");
            ActiveRecordStarter.Initialize(assembly, source2);

            using (TransactionScope  ts=new TransactionScope())
            {
                try
                {
                    foreach (TABLE1 tb1 in listTable1)
                    {
                        TABLE1 ntb1 = TABLE1.TryFind(tb1.Table1ID);

                        ////因为Version的问题,所以首先必须删除原来的。否则save or update 会提示
                        ////Row was updated or deleted by another transcation
                        if (ntb1 != null)
                        {
                            // 首先删除子表
                            foreach (TABLE2 tb2 in ntb1.TABLE2s)
                            {
                                tb2.Delete();
                            }
                            ntb1.Delete();
                        }

                        tb1.Create();


                        ////子表
                        foreach (TABLE2 tb2 in tb1.TABLE2s)
                        {
                            tb2.Create();
                        }


                    }                


                    ts.VoteCommit();
                    MessageBox.Show("成功");
                }
                catch
                {
                    ts.VoteRollBack();
                    MessageBox.Show("失败");

                }

            }

posted on 2008-11-07 09:21  ugvanxk  阅读(355)  评论(0编辑  收藏  举报

导航