понедельник, 12 марта 2012 г.

SMO (SQL Server) how to use "Transfer" class to transfer datas and schemas. I hope it would be helpfull.

Доброго времени суток. Вот Сейчас представлю реальный пример работы с классом C# Transfer.
Смысл заключается в трансфере сначала одного набора объектов (только структуры таблиц ), после чего трансферится и структуры и данные. Довольно удобная штука если вам необходимо используя SMO выполнить трансфер с одного сервера на другой или же выполнить трансфер в рамках одного сервера. И так код:


 public void CopyDbStruct(string fromDbName, string toDbName)
    {
      string[] dataTables = new string[] { "Table1", " Table2 ", " Table3 ", " Table4 ",  " Table5 ", " Table6 ", " Table7 ", " Table8 " };
      string[] schemaTables = new string[] {
                                            "TableSch1", " TableSch2", " TableSch3", " TableSch4"," TableSch5 ",
                                            "TableSch6", " TableSch7", " TableSch8", " TableSch9",
                                            " TableSch10", " TableSch11", " TableSch12", " TableSch13",
                                            " TableSch14", " TableSch15", " TableSch16", " TableSch17",
                                            " TableSch18", " TableSch19", " TableSch20", " TableSch21",
                                            " TableSch22", " TableSch23", " TableSch24"
                                            };        
   
   
      Server srv = new Server("Earth\\SQLSERVER");    
      srv.ConnectionContext.LoginSecure = false;
      srv.ConnectionContext.Login = UserName;
      srv.ConnectionContext.Password = Password;


      Database db = srv.Databases[fromDbName];
      if (db != null)
      {
        Transfer tr = new Transfer(db);
        tr.CopyAllObjects = false;
        tr.CopyAllTables = false;
        tr.DestinationServer = srv.Name;
        tr.DestinationDatabase = toDbName;
        tr.Options.IncludeIfNotExists = true;
        tr.CopySchema = true;
        tr.CopyData = false;
        tr.DestinationLoginSecure = false;
        tr.DestinationLogin = UserName;
        tr.DestinationPassword = Password;
        tr.DropDestinationObjectsFirst = true;
       // заполняем ObjectList таблицами из которых мы хотим переместить только схему
        for (int i = 0; i < schemaTables.Length; i++)
        {        
          tr.ObjectList.Add(db.Tables[schemaTables[i]]);
        }

        tr.TransferData(); // выполняем трансфер
        tr.ObjectList.Clear(); // после чего очищаем список ObjectList для последующего добавление в него других данных.
   
        tr.CopyData = true; // оба эти флага говорят что переносить будем и схему и структуру
        tr.CopySchema = true;
       // заполняем ObjectList таблицами из которых мы хотим переместить и схему и данные
        for (int i = 0; i < dataTables.Length; i++)
        {
          tr.ObjectList.Add(db.Tables[dataTables[i]]);
        }
        tr.TransferData(); // и теперь уже заливаем в нужную на базу таблицы с данными.
      }
}

Способ проверен в реальной ситуации, на реальных таблицах. Сразу приготовьтесь к тому что этот процесс займет некоторое время.

Комментариев нет:

Отправить комментарий