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

//功能介绍:使用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:\Windows\assembly\GAC_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();

}

DAC--使用DAC来导出数据库脚本的更多相关文章

  1. MySQL Workbench 导出数据库脚本(图文)

    1.如下图红框所示,在Server Administration那里,点击"New Server Instance" 2.如下图所示,如果是连接本地数据库,则选localhost, ...

  2. PL SQLDEVELOPMENT导出数据库脚本

    Tools--export Tables--选择表--SQL Inserts-- watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHprMTU2MjExMD ...

  3. MySql数据库导出完整版(导出数据库,导出表,导出数据库结构)

    MySql数据库导出完整版(导出数据库,导出表,导出数据库结构) 用MySqlCE导出数据库脚本时,如数据库中包含中文内容,则导出异常. 现在可以通过mysqldump.exe直接导出数据库脚本步骤如 ...

  4. SQL Server 2012 数据库数据导出为脚本

    转自:http://blog.csdn.net/ituff/article/details/8265822 将高版本的的SQL Server数据库移到低版本的SQL Server是一件十分蛋疼的事,最 ...

  5. SQL Server2012如何导出sql脚本并且还原数据库

    一  备份数据库 1  选择某一个数据库,右键依次选择:任务==>生成脚本: 2  选择要编写脚本的数据库对象,注意此处可以选择特定的数据库对象,我们可以选择我们需要备份的数据表. 3   在当 ...

  6. 使用PostgreSQL 脚本导出数据库的DDL

    使用PostgreSQL 脚本导出数据库的DDL 本文主要介绍如何使用基于 PostgreSQL pgdump编写的自定义脚本来导出数据库的DDL. 一.文件说明: 1.pgdump基础语句.sql: ...

  7. MySQL导入sql脚本 导出数据库

    导出数据库 不能停止服务 cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) mysqldump -u用户名 -p 数据库名 > 导出的文件名 ...

  8. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  9. DB2导入导出数据库数据

    导出数据库中数据 在db2cmd命令下生成建库脚本(-z指定模式名) db2look -d BBS -z db2admin -u db2admin -e -o bbs.sql 在db2cmd命令下导出 ...

随机推荐

  1. 慕课网access_token的获取(下)

    接口调用返回的结果是两个字段:access_token和expires_in,所以需要创建一个实体类封装这两个字段 运行测试类WeixinTest.java控制台打印出错误信息 重置开发者密钥试试看 ...

  2. Json解析数据的简单使用

    简单的记一下Json解析的简单实用: 使用场景:后台传到客户端的Json数据,类似于: string jsonObject="{'Name':'Jack','Age':25}"; ...

  3. 对象池 object pool

    对象池适用于: 对象的创建很耗时 对象频繁地释放再创建 对象池的实现:将释放的对象放进对象池中,在新建对象时,从对象池取对象 public class ObjectPool<T> wher ...

  4. Java finalize以及Garbage Collection

    Java的垃圾回收机制: Java的垃圾回收并不等于C++中的析构.Java中,只有在程序濒临存储空间用完的那一刻,对象占用的空间才会释放.所以,在JAVA程序中,我们通常只考虑创建对象,而从不关心对 ...

  5. [leetcode]349. Intersection of Two Arrays数组交集

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  6. URL统一资源定位符的组成

    URL:Uniform Resource Locator统一资源定位符 用于定位网络上我们需要访问的资源 组成:协议名称+域名+路径+资源的名称.如:https://img13.360img.com/ ...

  7. [Selenium]如何实现上传本地文件

    public void uploadLocalFileToServer(String uploadFileName){ String AutomationPath = System.getProper ...

  8. 电商类Web原型制作分享——聚美优品

    这是一家化妆品限时特卖商城.作为美妆电商类网站的佼佼者,网站以用户体验为核心,画面主色调符合女性消费者审美.排版整齐,布局合理.网站用弹出面板实现点击弹出内容,鼠标悬停文字按钮颜色改变等交互效果. 本 ...

  9. 彻底关闭win10的自动更新,一定要坚持看到最后一页

    https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 是否好使我还在测试,不好使的话,再跟新 2018-05-20 今天电脑又 ...

  10. IE浏览器调用jquery需要注意的小问题

    今天在进行前端重构的时候发现了一个非常奇怪的浏览器兼容性问题,我想在网页上放一个JS的特效,于是下载了jquery-easyui,经过修改完成所需要的效果后,准备放入项目中,发现在IE浏览器中无法运行 ...