C# 使用SMO复制数据库但不传输所有数据

C# 使用SMO复制数据库但不传输所有数据,c#,smo,C#,Smo,我只需要复制数据库和传输特定表的数据,但我不知道如何在SMO中这样做 目前我拥有的是: try { if (isFromConsole) Console.WriteLine("Initializing database creation..."); var srcDbInfo = GetInfo(srcConnectionString); var destDbInfo = GetInfo(destConnectionString); var

我只需要复制数据库和传输特定表的数据,但我不知道如何在SMO中这样做

目前我拥有的是:

try
{
    if (isFromConsole)
        Console.WriteLine("Initializing database creation...");

    var srcDbInfo = GetInfo(srcConnectionString);
    var destDbInfo = GetInfo(destConnectionString);


    var sc = new ServerConnection();
    sc.LoginSecure = false;
    sc.ServerInstance = srcDbInfo.DataSource;
    sc.Login = srcDbInfo.UserID;
    sc.Password = srcDbInfo.Password;
    sc.ConnectTimeout = 0;
    sc.StatementTimeout = 0;

    sc.Connect();

    if (sc.IsOpen)
    {
        Server server = new Server(sc);

        Database srcDb = server.Databases[srcDbInfo.DBName];
        Database destDb = new Database(server, destDbInfo.DBName);

        // Create method will create the database on the specified server 
        if (isFromConsole)
            Console.WriteLine("Creating Database...");
        destDb.Create();

        if (isFromConsole)
            Console.WriteLine("Database successfully created...");

        //Create an object of Transfer class and pass
        //reference of source database to its construtor 
        Transfer transfer = new Transfer(srcDb);
        transfer.Options.WithDependencies = true;
        transfer.Options.ContinueScriptingOnError = true;
        // set copy options
        transfer.CopyAllObjects = true;
        transfer.CopyAllSchemas = true;
        //Copy all user defined data types from source to destination 
        transfer.CopyAllUserDefinedDataTypes = true;
        //Copy all tables from source to destination
        transfer.CopyAllTables = true;
        //Copy data of all source tables to destination tables 
        //It actually generates INSERT statement for destination 
        transfer.CopyData = true;
        //Copy all stored procedure from source to destination 
        transfer.CopyAllStoredProcedures = true;
        //set reference to all
        transfer.Options.DriAll = true;
        //specify the destination server name 
        transfer.DestinationServer = server.Name;
        //specify the destination database name and credentials
        transfer.DestinationDatabase = destDb.Name;
        transfer.DestinationLoginSecure = false;
        transfer.DestinationLogin = destDbInfo.UserID;
        transfer.DestinationPassword = destDbInfo.Password;


        //TransferData method transfers the schema objects and data 
        //whatever you have specified to destination database 
        if (isFromConsole)
            Console.WriteLine("Transferring data...");
        transfer.TransferData();


        if (isFromConsole)
            Console.WriteLine("Transfer completed...");
    }
}
catch (Exception ex)
{
    throw ex;
}

此代码复制并传输源数据库中的所有数据。我需要设置所有表,以便复制其中的所有数据,但我不知道如何复制,也看不到它的任何文档。

这里是我从VB.NET(从我的GitHub存储库)转换的一个方法,看看这是否适用于您

//
///将数据库复制到同一服务器上的新数据库
/// 
///要复制的数据库
///复制到具有唯一数据库名称的数据库
/// 
公共bool CopyDatabase(字符串pOriginalDatabase、字符串pNewDatabase)
{
var srv=新服务器();
数据库db=null;
db=srv.Databases[pOriginalDatabase];
数据库dbCopy=null;
dbCopy=新数据库(srv、pNewDatabase);
dbCopy.Create();
Transfer=null;
传输=新传输(db)
{
CopyAllTables=false,
选择权=
{
WithDependencies=true,
continueDescriptionOneError=真
},
DestinationDatabase=pNewDatabase,
DestinationServer=srv.Name,
DestinationLoginSecure=true
};
trans.Options.DriAllKeys=true;
trans.CopySchema=true;
trans.TransferData();
返回true;
}
另见


编辑我刚刚注意到您需要特定的表,我发布的“按原样”不复制数据,只复制结构,因此它可能无法提供您需要的内容。

如果您使用SQL Server管理,简单的方法是断开数据库的连接,复制mdf和ldf文件。重新附加原始数据库。然后将副本附加到其他名称下。这将复制所有内容。然后,您可以删除不需要的内容。查看ObjectList并确保将CopyAllObjects设置为false。我想复制所有表,但包含数据的表是特定的
/// <summary>
/// Copy database to new database on same server
/// </summary>
/// <param name="pOriginalDatabase">Database to copy</param>
/// <param name="pNewDatabase">Copy to database with unique database name</param>
/// <returns></returns>
public bool CopyDatabase(string pOriginalDatabase, string pNewDatabase)
{

    var srv = new Server();
    Database db = null;

    db = srv.Databases[pOriginalDatabase];
    Database dbCopy = null;
    dbCopy = new Database(srv, pNewDatabase);
    dbCopy.Create();

    Transfer trans = null;
    trans = new Transfer(db)
    {
        CopyAllTables = false,
        Options =
            {
                WithDependencies = true,
                ContinueScriptingOnError = true
            },
        DestinationDatabase = pNewDatabase,
        DestinationServer = srv.Name,
        DestinationLoginSecure = true
    };
    trans.Options.DriAllKeys = true;
    trans.CopySchema = true;

    trans.TransferData();

    return true;

}