【问题标题】:Extract Azure SQL Database using DataTools utility使用 DataTools 实用程序提取 Azure SQL 数据库
【发布时间】:2019-08-28 14:47:49
【问题描述】:

我想使用 VS2017 Data-Tools 编写一个实用程序,该实用程序将提取 Azure Sql 数据库并在本地文件存储上创建 dacpac。

我知道我可以使用 SQL Server 对象资源管理器并从中提取信息,但我想编写一个 c# 可执行文件来为我做同样的事情,这样我就可以自动化它并安排它每周发生一次。

我需要能够排除一些表,但除此之外它是一个直接的提取。这可能吗,有没有我可以用来开始的例子?抱歉,这对我来说是全新的,所以不知道从哪里开始。

【问题讨论】:

    标签: azure visual-studio-2017 extract sql-server-data-tools


    【解决方案1】:

    找到适合我的解决方案:

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data.SqlClient;
    using Microsoft.SqlServer.Dac;
    
    private static string excludeSchemas = ConfigurationManager.AppSettings["ExcludeSchemas"];
    private static string excludeTables = ConfigurationManager.AppSettings["ExcludeTables"];
    private static string TableQuery = "SELECT SCHEMA_NAME(schema_id), name FROM sys.tables where SCHEMA_NAME(schema_id) not in ({0} ) and name  not in ({1}) order by schema_id,name";
    
    static void Main(string[] args)
    {
        Extract();
    }
    
    private static void Extract()
    {
        var sourceConnectionString = ConfigurationManager.AppSettings["SourceDbConnection"];
        DacServices svc = new DacServices(sourceConnectionString);
    
        DacExtractOptions dacExtractOptions = new DacExtractOptions
        {
            ExtractApplicationScopedObjectsOnly = true,
            ExtractReferencedServerScopedElements = false,
            VerifyExtraction = false,
            Storage = DacSchemaModelStorageType.Memory
        };
        var tables = BuildTables();
        var dacPacDest = ConfigurationManager.AppSettings["DacPacDestination"];
        var sourceDb = ConfigurationManager.AppSettings["sourceDbName"];
    
        svc.Extract(dacPacDest,sourceDb, "Sample DACPAC", new Version(1, 0, 0), "Sample Extract", tables, dacExtractOptions);
    
    }
    
    private static IEnumerable<Tuple<string, string>> BuildTables()
    {
        var tbls = new List<Tuple<string, string>>();
        var tblConnection = ConfigurationManager.AppSettings["SourceDbConnection"];
        using (SqlConnection connection = new SqlConnection(tblConnection))
        {
            connection.Open();
            string query = string.Format(TableQuery, excludeSchemas, excludeTables);
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        tbls.Add(new Tuple<string, string>(reader.GetString(0), reader.GetString(1)));
                    }
                }
            }
        }
        return tbls;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多