public void TestImportExport(bool preexistingDatabase, string testName, bool useNetworkIsolation) { using (SqlManagementTestContext context = new SqlManagementTestContext(this, testName)) { ResourceGroup resourceGroup = context.CreateResourceGroup(); Server server = context.CreateServer(resourceGroup); SqlManagementClient sqlClient = context.GetClient <SqlManagementClient>(); string storageAccountName = SqlManagementTestUtilities.GenerateName(prefix: "sqlcrudtest"); // Begin creating storage account and container Task <StorageContainerInfo> storageContainerTask = CreateStorageContainer(context, resourceGroup, storageAccountName); string login = SqlManagementTestUtilities.DefaultLogin; string password = SqlManagementTestUtilities.DefaultPassword; string dbName = SqlManagementTestUtilities.GenerateName(); string dbName2 = SqlManagementTestUtilities.GenerateName(); Dictionary <string, string> tags = new Dictionary <string, string>() { { "tagKey1", "TagValue1" } }; // set server firewall rule sqlClient.FirewallRules.CreateOrUpdate(resourceGroup.Name, server.Name, SqlManagementTestUtilities.GenerateName(), new FirewallRule() { StartIpAddress = "0.0.0.0", EndIpAddress = "255.255.255.255" }); // Create 1 or 2 databases sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, new Database() { Location = server.Location }); if (preexistingDatabase) { sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName2, new Database() { Location = server.Location }); // Verify existence of new database Assert.NotNull(sqlClient.Databases.Get(resourceGroup.Name, server.Name, dbName2)); } // Get Storage container credentials StorageContainerInfo storageContainerInfo = storageContainerTask.Result; string exportBacpacLink = string.Format( CultureInfo.InvariantCulture, "{0}/{1}.bacpac", storageContainerInfo.StorageContainerUri, dbName); string sqlServerResourceId = $"/subscriptions/{sqlClient.SubscriptionId}/resourceGroups/{resourceGroup.Name}/providers/Microsoft.Sql/servers/{server.Name}"; string storageAccountResourceId = $"/subscriptions/{sqlClient.SubscriptionId}/resourcegroups/{resourceGroup.Name}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}"; var exportDatabaseDefinition = new ExportDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink }; if (useNetworkIsolation) { exportDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } // Export database to bacpac sqlClient.Databases.Export(resourceGroup.Name, server.Name, dbName, exportDatabaseDefinition); // Import bacpac to new/existing database if (preexistingDatabase) { var importDatabaseDefinition = new ImportExistingDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink }; if (useNetworkIsolation) { importDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } // Import bacpac to existing database sqlClient.Databases.ImportWithHttpMessagesAsync(resourceGroup.Name, server.Name, dbName2, importDatabaseDefinition).Wait(); } else { var importDatabaseDefinition = new ImportNewDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink, DatabaseName = dbName2, Edition = SqlTestConstants.DefaultDatabaseEdition, ServiceObjectiveName = ServiceObjectiveName.Basic, MaxSizeBytes = (2 * 1024L * 1024L * 1024L).ToString(), }; if (useNetworkIsolation) { importDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } sqlClient.Servers.ImportDatabase(resourceGroup.Name, server.Name, importDatabaseDefinition); } } }
/// <summary> /// Imports a bacpac into a new database. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group that contains the resource. You can obtain /// this value from the Azure Resource Manager API or the portal. /// </param> /// <param name='serverName'> /// The name of the server. /// </param> /// <param name='parameters'> /// The database import request parameters. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <ImportExportOperationResult> BeginImportDatabaseAsync(this IServersOperations operations, string resourceGroupName, string serverName, ImportNewDatabaseDefinition parameters, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.BeginImportDatabaseWithHttpMessagesAsync(resourceGroupName, serverName, parameters, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Creates new import request /// </summary> public ImportExportOperationResult BeginImportNewDatabase(string resourceGroupName, string serverName, ImportNewDatabaseDefinition parameters, out Uri operationStatusLink) { LastLocationHeader = null; LocationHeaderResetEvent.Reset(); ImportExportOperationResult result = GetCurrentSqlClient().Servers.BeginImportDatabase(resourceGroupName, serverName, parameters); LocationHeaderResetEvent.WaitOne(3000); operationStatusLink = LastLocationHeader; return(result); }
/// <summary> /// Imports a bacpac into a new database. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group that contains the resource. You can obtain /// this value from the Azure Resource Manager API or the portal. /// </param> /// <param name='serverName'> /// The name of the server. /// </param> /// <param name='parameters'> /// The database import request parameters. /// </param> public static ImportExportOperationResult BeginImportDatabase(this IServersOperations operations, string resourceGroupName, string serverName, ImportNewDatabaseDefinition parameters) { return(operations.BeginImportDatabaseAsync(resourceGroupName, serverName, parameters).GetAwaiter().GetResult()); }