请选择 进入手机版 | 继续访问电脑版

大富翁Delphi开发技术网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3629|回复: 0

[精品文章] 使用SMO导入导出数据库

[复制链接]

270

主题

290

帖子

919

积分

高级会员

Rank: 4

积分
919
发表于 2014-5-1 16:30:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 普普通通 于 2014-5-1 16:32 编辑

介绍

我们经常会需要进行数据库的导入和导入,虽然有很多方法来进行处理,但是最简单的就是通过SMO来操作,但是通过SMO,我们必须开发导入导出的代码,对于代码的开发,我们需要导入下面的命名空间。

  1. Microsoft.SqlServerConnectionInfo
  2. Microsoft.SqlServer.Dmf
  3. Microsoft.SqlServer.Management.Sdk.Sfc
  4. Microsoft.SqlServer.Smo
  5. Microsoft.SqlServer.SmoExtended
  6. Microsoft.SqlServer.SqlEnum
复制代码

下面会通过代码来介绍如何通过SMO来进行数据库的导出到目标数据库

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using Microsoft.SqlServer.Management.Common;
  7. using Microsoft.SqlServer.Management.Smo;
  8. using System.Configuration;
  9. using System.Diagnostics;
  10. using IOM.DataGrazer;
  11. using IOM.DataGrazer.Common;
  12. using IOM.DataGrazer.DBHelper;
  13. using System.Data.SqlClient;

  14. namespace ExportAndImportDatabase
  15. {
  16. class Program
  17. {
  18. static void Main(string[] args)
  19. {
  20. try
  21. {
  22. // Export source database to destination database
  23. ExportData();
  24. }
  25. catch (Exception ex)
  26. {
  27. Console.WriteLine(ex.Message);
  28. }
  29. Console.ReadLine();
  30. }

  31. private static void ExportData()
  32. {
  33. string sourceConnectionString = string.Empty;
  34. string destinationConnectionString = string.Empty;
  35. SqlConnectionStringBuilder sourceConnBuilder = new SqlConnectionStringBuilder(sourceConnectionString);
  36. SqlConnectionStringBuilder destConnBuilder = new SqlConnectionStringBuilder(destinationConnectionString);

  37. ServerConnection serverConnection;
  38. if (sourceConnBuilder.IntegratedSecurity)
  39. {
  40. serverConnection = new ServerConnection(sourceConnBuilder.DataSource);

  41. // Windows Authentication
  42. serverConnection.LoginSecure = true;
  43. }
  44. else
  45. {
  46. serverConnection = new ServerConnection
  47. (sourceConnBuilder.DataSource, sourceConnBuilder.UserID, sourceConnBuilder.Password);
  48. }

  49. Server server = new Server(serverConnection);
  50. Database database = server.Databases[sourceConnBuilder.InitialCatalog];

  51. // Define a Transfer object and set the required options and properties.
  52. Transfer xfr = new Transfer(database);

  53. xfr.CopyAllObjects = false;

  54. xfr.CopyAllTables = true;
  55. ////xfr.CopyData = true;
  56. ////xfr.CopySchema = true;
  57. ////xfr.DropDestinationObjectsFirst = true;

  58. ////xfr.CreateTargetDatabase = true;
  59. xfr.DestinationDatabase = "DestDBName";
  60. xfr.DestinationServer = destConnBuilder.DataSource;

  61. if (destConnBuilder.IntegratedSecurity)
  62. {
  63. xfr.DestinationLoginSecure = true;
  64. }
  65. else
  66. {
  67. xfr.DestinationLogin = destConnBuilder.UserID;
  68. xfr.DestinationPassword = destConnBuilder.Password;
  69. }

  70. ScriptingOptions scriptOptions = new ScriptingOptions();
  71. scriptOptions.ScriptSchema = true;
  72. scriptOptions.ScriptData = true;
  73. scriptOptions.EnforceScriptingOptions = true;
  74. scriptOptions.DriAllKeys = true;
  75. scriptOptions.ScriptBatchTerminator = true;
  76. scriptOptions.ScriptDrops = true;
  77. //scriptOptions.IncludeIfNotExists = true;

  78. scriptOptions.WithDependencies = true;
  79. ////scriptOptions.Indexes = true;
  80. xfr.Options = scriptOptions;

  81. xfr.DataTransferEvent += new DataTransferEventHandler(DataTransferEvent_Handler);
  82. xfr.DiscoveryProgress += new ProgressReportEventHandler(DiscoveryProgress_Handler);
  83. xfr.ScriptingProgress += new ProgressReportEventHandler(ScriptingProgress_Handler);
  84. xfr.ScriptingError += new ScriptingErrorEventHandler(ScriptingError_Handler);

  85. xfr.TransferData();
  86. }

  87. static void DiscoveryProgress_Handler(object sender, ProgressReportEventArgs e)
  88. {
  89. Console.WriteLine(e.Total + "/" + e.TotalCount + " " + e.Current.Value);
  90. }

  91. static void DataTransferEvent_Handler(object sender, DataTransferEventArgs e)
  92. {
  93. Console.WriteLine("[" + e.DataTransferEventType + "] " + e.Message);
  94. }

  95. static void ScriptingProgress_Handler(object sender, ProgressReportEventArgs args)
  96. {
  97. Console.WriteLine("[" + args.Current.Value + "]");
  98. }

  99. static void ScriptingError_Handler(object sender, ScriptingErrorEventArgs args)
  100. {
  101. Console.WriteLine("[" + args.Current.Value + "]");
  102. }

  103. }
  104. }
复制代码

在上面的代码中,仅仅对表进行了到处到目标数据库,当然我们也可以将其他倒入到目标数据库,例如:存储过程、函数,而我们的代码仅仅需要配置:CopyAllObjects=True,在“Transfer”对象中,有4个事件可以进行使用,用来确定导入的进度。

转载请保留当前帖子的链接:http://www.dfwlt.com/forum.php?mod=viewthread&tid=506 谢谢!

搜索简单,分享不易,且分享且珍惜,您难道不想分享下您的心得?如果觉得本文章好的话,您可以在我们网站上注册,然后发布您的好的心得,让大家共同进步,谢谢!

最新添加

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申请友链|Archiver|手机版|小黑屋|大富翁Delphi开发技术网站 ( 苏ICP备12065705号-4 苏ICP备12065705号-4

GMT+8, 2020-7-6 21:08 , Processed in 0.110795 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表