Доброго времени суток. Вот Сейчас представлю реальный пример работы с классом 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(); // и теперь уже заливаем в нужную на базу таблицы с данными.
}
}
Способ проверен в реальной ситуации, на реальных таблицах. Сразу приготовьтесь к тому что этот процесс займет некоторое время.
Смысл заключается в трансфере сначала одного набора объектов (только структуры таблиц ), после чего трансферится и структуры и данные. Довольно удобная штука если вам необходимо используя 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(); // и теперь уже заливаем в нужную на базу таблицы с данными.
}
}
Способ проверен в реальной ситуации, на реальных таблицах. Сразу приготовьтесь к тому что этот процесс займет некоторое время.
Комментариев нет:
Отправить комментарий