zoukankan      html  css  js  c++  java
  • DAC--使用DAC来导出数据库脚本

       //==============================================

        //功能介绍:使用DAC来导出数据库脚本

        //注意事项:

        //1.本程序涉及到的DLL有:

        //  --Microsoft.SqlServer.ConnectionInfo.dll

        //  --Microsoft.SqlServer.Management.Dac.dll

        //  --Microsoft.SqlServer.Management.Sdk.Sfc.dll

        // --Microsoft.SqlServer.Management.SmoMetadataProvider.dll

        //2.以上DLL可以在C:WindowsassemblyGAC_MSIL下找到,

        //如果找不到,可以使用SQLSERVER 2012安装包安装以下MSI:

        //  --SQLSysClrTypes.msi

        //  --SharedManagementObjects.msi

        //  --DACFramework.msi

        //

       //==============================================

       

       

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Data.SqlClient;

    using Microsoft.SqlServer.Management.Common;

    using Microsoft.SqlServer.Management.Dac;

    using Microsoft.SqlServer.Management.Smo;

    using System.IO;

    class DACExtracter

        {

            private List <string>GetDatabaseNames(SqlConnection conn)

            {

                SqlCommand comm = newSqlCommand( "SELECT name FROM sys.databases where database_id>4",conn);

                List<string >dbNames = new List<string >();

                try

                {

                    conn.Open();

                    SqlDataReader reader= comm.ExecuteReader();

                    while(reader.Read())

                    {

                       dbNames.Add(reader["name" ].ToString());

                    }

                    return dbNames;

                }

                catch

                {

                    Console.WriteLine("connect dbfailed");

                    throw(new Exception("connect db failed"));

                }

                finally

                {

                    if(conn!=null )

                    {

                        conn.Close();

                        conn.Dispose();

                    }

                }

            }

            public voidExtractDAC(string connectionString, string extractFolderPath)

            {

                try

                {

                    SqlConnectionsqlConnection = new SqlConnection(connectionString);

                    ServerConnectionconn = new ServerConnection(sqlConnection);

                    Server destServer =new Server(conn);

                    List<string >dbNames = GetDatabaseNames(sqlConnection);

                    string version ="1.0.0.1" ;

                    foreach (stringdbName in dbNames)

                    {

                       ExtractDAC(destServer, dbName, version, extractFolderPath);

                    }

                }

                catch(Exception )

                {

                   Console.WriteLine("End with error" );

                }

            }

            private voidExtractDAC(Server destServer,string databaseName,string version,stringextractFolderPath)

            {

                try

                {

                   Console.WriteLine(destServer.Information.Version);

                    DacExtractionUnitdacUnit = new DacExtractionUnit(destServer, databaseName, databaseName, newVersion (version));

                    DirectoryInfo dir =new DirectoryInfo(extractFolderPath);

                    if (!dir.Exists)

                    {

                        dir.Create();

                    }

                    string dacFilePath =dir.FullName + @"" + databaseName + ".dacpac" ;

                    if (!File.Exists(dacFilePath))

                    {

                       File.Delete(dacFilePath);

                    }

                   dacUnit.Extract(dacFilePath);

                   Console.WriteLine("extract "+databaseName+"successfully");

                }

                catch(IOException )

                {

                   Console.WriteLine("please check extract folder");

                   Console.WriteLine("extract " + databaseName + "failed" );

                }

                catch (Exception )

                {

                   Console.WriteLine("extract " + databaseName + "failed" );

                }

              

            }

        }

            static void Main(string[] args)

            {

                String connectionString= "Data Source=88.88.88.88,18991;Initial Catalog=master;IntegratedSecurity=False;User ID=sa;Password=sa;";

                DACExtracterdacExtracter = new DACExtracter();

               dacExtracter.ExtractDAC(connectionString, @"E:DBScript" );

               Console.WriteLine("press any key to close");

                Console.ReadLine();

            }

  • 相关阅读:
    Http中的patch
    如何实现腾讯地图的路径规划功能?
    各类数据库分页SQL语法
    ABC222F
    ABC222 G
    LG5308 [COCI2019] Quiz(wqs二分+斜率优化DP)
    [USACO21OPEN] Portals G(Kruskal)
    【做题笔记】SP27379 BLUNIQ
    【做题笔记】CF938C Constructing Tests
    CSP-J/S2021 自闭记
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3518298.html
Copyright © 2011-2022 走看看