Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Ну, после контакта с Поддержкой Microsft я получил его работающий правильно, но это медленно и более или менее бесполезно. При выполнении резервного копирования и затем восстановление намного быстрее, и я буду использовать его, пока новая копия должна жить на том же сервере как оригинал.
рабочий код следующие:
ServerConnection conn = new ServerConnection("rune\\sql2008");
Server server = new Server(conn);
Database newdb = new Database(server, "new database");
newdb.Create();
Transfer transfer = new Transfer(server.Databases["source database"]);
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = server.Name;
transfer.DestinationLoginSecure = true;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();
прием должен был установить свойство DestinationDatabase. Это должно быть установлено, даже если цель - тот же самый как источник. Кроме того, я должен был соединиться с сервером как именованный экземпляр вместо того, чтобы использовать другие опции соединения.
Попробуйте установить для SetDefaultInitFields значение true на объекте Server .
У меня была та же проблема с медленно работающим объектом базы данных SMO. Я предполагаю, что это потому, что SQL Server не любит извлекать целые объекты и коллекции сразу, вместо этого ленивая загрузка всего, вызывая круговое обращение для каждого поля, что для всей базы данных довольно неэффективно.