Introduction
There will be situation where you want to export data from one
database to other database. This can be achieved in many ways but the
easiest way to do is by using SSMS export/import wizard but there will be
a situation where you have to export data using code, I mean from your
application. Such situations can be easily dealt with using SQL
Management Objects (SMO).
For the following sample application to work properly, you need to refer to the following SMO DLLs:
Microsoft.SqlServerConnectionInfo
Microsoft.SqlServer.Dmf
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.SqlEnum
Here is the code that shows how to export data from source database to destination database.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System.Configuration;
using System.Diagnostics;
using IOM.DataGrazer;
using IOM.DataGrazer.Common;
using IOM.DataGrazer.DBHelper;
using System.Data.SqlClient;
namespace ExportAndImportDatabase
{
class Program
{
static void Main(string[] args)
{
try
{
ExportData();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static void ExportData()
{
string sourceConnectionString = string.Empty;
string destinationConnectionString = string.Empty;
SqlConnectionStringBuilder sourceConnBuilder = new SqlConnectionStringBuilder(sourceConnectionString);
SqlConnectionStringBuilder destConnBuilder = new SqlConnectionStringBuilder(destinationConnectionString);
ServerConnection serverConnection;
if (sourceConnBuilder.IntegratedSecurity)
{
serverConnection = new ServerConnection(sourceConnBuilder.DataSource);
serverConnection.LoginSecure = true;
}
else
{
serverConnection = new ServerConnection
(sourceConnBuilder.DataSource, sourceConnBuilder.UserID, sourceConnBuilder.Password);
}
Server server = new Server(serverConnection);
Database database = server.Databases[sourceConnBuilder.InitialCatalog];
Transfer xfr = new Transfer(database);
xfr.CopyAllObjects = false;
xfr.CopyAllTables = true;
xfr.DestinationDatabase = "DestDBName";
xfr.DestinationServer = destConnBuilder.DataSource;
if (destConnBuilder.IntegratedSecurity)
{
xfr.DestinationLoginSecure = true;
}
else
{
xfr.DestinationLogin = destConnBuilder.UserID;
xfr.DestinationPassword = destConnBuilder.Password;
}
ScriptingOptions scriptOptions = new ScriptingOptions();
scriptOptions.ScriptSchema = true;
scriptOptions.ScriptData = true;
scriptOptions.EnforceScriptingOptions = true;
scriptOptions.DriAllKeys = true;
scriptOptions.ScriptBatchTerminator = true;
scriptOptions.ScriptDrops = true;
scriptOptions.WithDependencies = true;
xfr.Options = scriptOptions;
xfr.DataTransferEvent += new DataTransferEventHandler(DataTransferEvent_Handler);
xfr.DiscoveryProgress += new ProgressReportEventHandler(DiscoveryProgress_Handler);
xfr.ScriptingProgress += new ProgressReportEventHandler(ScriptingProgress_Handler);
xfr.ScriptingError += new ScriptingErrorEventHandler(ScriptingError_Handler);
xfr.TransferData();
}
static void DiscoveryProgress_Handler(object sender, ProgressReportEventArgs e)
{
Console.WriteLine(e.Total + "/" + e.TotalCount + " " + e.Current.Value);
}
static void DataTransferEvent_Handler(object sender, DataTransferEventArgs e)
{
Console.WriteLine("[" + e.DataTransferEventType + "] " + e.Message);
}
static void ScriptingProgress_Handler(object sender, ProgressReportEventArgs args)
{
Console.WriteLine("[" + args.Current.Value + "]");
}
static void ScriptingError_Handler(object sender, ScriptingErrorEventArgs args)
{
Console.WriteLine("[" + args.Current.Value + "]");
}
}
}
The above sample exports only tables, keys and its data to destination database. If you want to export everything including stored procedure and functions, make ‘CopyAllObjects = true
’, then there is no need to explicitly mention ‘CopyAllTables = true
’ in the above code. The ‘Transfer
’ object has four events which can be useful to identify the status of the transfer operation.