Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[Feature] Copy objects from live Server to offline (design mode) Server

Aberta
#205 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
30/100
Tipo de issue
Funcionalidade
Clareza
Precisa de esclarecimento
Status de atividade
Estagnada
Stack de tecnologia
csharp
Domínio
database

Direção de pesquisa

Comece pelos pontos de entrada Server, Database, Table e Transfer mostrados na issue, concentrando-se no parenting do modo de design offline e no comportamento da transferência. Determine uma forma suportada de copiar definições de objetos de um servidor ativo para um servidor offline e gerar um script da hierarquia resultante sem se conectar a uma instância de destino.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

It would be really great if there were a way to transfer object definitions from a live server to an offline server.
My use case is that I am designing an application which allows users to compile many database objects from different instances into a single hierarchy, then generate a script to create that hierarchy on an arbitrary instance of SQL Server.
To accomplish this, I was hoping to add the online objects selected by the user to an offline (design mode) Server, then use SMO's scripting capabilities to script the entire tree to a .sql file.

For example:

var onlineServerConnection = new ServerConnection(new SqlConnection(/* ... */));
var onlineServer = new Server(onlineServerConnection);
var onlineDatabase = onlineServer.Databases["SmoTestDatabaseOnline"];
var onlineTable = onlineDatabase.Tables["SmoTestTable"];

var offlineServerConnection = new ServerConnection { ServerVersion = new ServerVersion(15, 0), TrueName = "designMode" };
var offlineServer = new Server(offlineServerConnection);
(offlineServer as ISfcHasConnection).ConnectionContext.Mode = SfcConnectionContextMode.Offline;
var offlineDatabase = new Database
{
	Parent = offlineServer,
	Name = "SmoTestDatabaseOffline"
};
onlineTable.Parent = offlineDatabase;
offlineDatabase.Tables.Add(onlineTable);
offlineServer.Databases.Add(offlineDatabase);

But I'm met with Microsoft.SqlServer.Management.Smo.FailedOperationException: SetParent failed for Table 'dbo.SmoTestTable'. ---> Microsoft.SqlServer.Management.Smo.InvalidSmoOperationException: Cannot perform the operation on this object, because the object is a member of a collection..
If I remove the onlineTable.Parent = offlineDatabase;, I am instead met with Microsoft.SqlServer.Management.Smo.FailedOperationException: Parent property of object [dbo].[SmoTestTable] does not match the collection's parent to which it is added.

I also attempted to use the Transfer class to accomplish this, but was met with Microsoft.SqlServer.Management.Common.TransferException: An error occurred while transferring data. See the inner exception for details. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

var onlineDatabase = onlineServer.Databases["SmoTestDatabaseOnline"];
var onlineTable = onlineDatabase.Tables["SmoTestTable"];

//--------------------------------------------------

var transfer = new Transfer(onlineDatabase)
{
	DestinationServer = offlineServer.Name,
	DestinationDatabase = offlineDatabase.Name,
	CopyAllObjects = false,
	CopySchema = true
};
transfer.ObjectList.Add(onlineTable);
transfer.TransferData();

offlineServer.Refresh();
offlineDatabase.Refresh();

As it stands, the only conceivable way to accomplish what I want to do would be to create a new Table object and individually copy all properties onlineTable to it. But this is cumbersome and prone to error.

Linguagem predominante
C#
Estrelas
143
Forks
28
Métricas de merge de PRs
Nenhum PR com merge em 30d

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de microsoft/sqlmanagementobjects

Todas as issues de microsoft/sqlmanagementobjects

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.