简体   繁体   English

使用SMO从数据库备份失败

[英]Backup from database with SMO failed

Backup from SQL Server 2008 R2 databese using SMO is not working : 使用SMO从SQL Server 2008 R2数据库备份不起作用:

BACKUP DATABASE is terminating abnormally. BACKUP DATABASE异常终止。
Source=.Net SqlClient Data Provider Source = .Net SqlClient数据提供程序
ErrorCode=-2146232060 错误代码= -2146232060
Class=16 类= 16
LineNumber=1 LineNumber = 1
Number=3201 数= 3201
Procedure="" 程序=“”
Server=(local) 服务器=(本地)
State=1 状态= 1

StackTrace: 堆栈跟踪:
InnerException: Microsoft.SqlServer.Management.Common.ExecutionFailureException InnerException:Microsoft.SqlServer.Management.Common.ExecutionFailureException
Message=An exception occurred while executing a Transact-SQL statement or batch. 消息=执行Transact-SQL语句或批处理时发生异常。
Source=Microsoft.SqlServer.ConnectionInfo 源= Microsoft.SqlServer.ConnectionInfo

StackTrace: 堆栈跟踪:
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) 在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes执行类型)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType) 在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands,ExecutionTypes执行类型)
at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries) 在Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection查询)
at Microsoft.SqlServer.Management.Smo.BackupRestoreBase.ExecuteSql(Server server, StringCollection queries) 在Microsoft.SqlServer.Management.Smo.BackupRestoreBase.ExecuteSql(服务器服务器,StringCollection查询)
at Microsoft.SqlServer.Management.Smo.Backup.SqlBackup(Server srv) 在Microsoft.SqlServer.Management.Smo.Backup.SqlBackup(Server srv)

InnerException: System.Data.SqlClient.SqlException InnerException:System.Data.SqlClient.SqlException
at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) 在Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction操作,对象execObject,数据集fillDataSet,布尔值catchException)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) 在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes执行类型)

My code: 我的代码:

class Backup_Restore 
{
    public string BackUpConString = @"Data Source=(local);Initial Catalog=taban;Integrated Security=True";
public string ReStoreConString = "Data Source=(local);Initial Catalog=master;Integrated Security=True";

    public void BackUpMyDB()
    {
        using (SqlConnection con = new SqlConnection(BackUpConString))
        {
            ServerConnection srvConn = new ServerConnection(con);

            Server srvr = new Server(srvConn);

            if (srvr != null)
            {
                try
                {
                    Backup bkpDatabase = new Backup();
                    bkpDatabase.Action = BackupActionType.Database;
                    bkpDatabase.Database = "taban";
                    SaveFileDialog sfd = new SaveFileDialog();
                    sfd.Filter = "BackUp File|*.taban";
                    sfd.FileName = "BackUp_" + (DateTime.Now.ToShortDateString().Replace('/', '.'));
                    if (sfd.ShowDialog() == DialogResult.OK)
                    {
                        BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
                        bkpDatabase.Devices.Add(bkpDevice);
                        bkpDatabase.SqlBackup(srvr);

                        MessageBox.Show("Bakup of Database successfully created", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception e) { 
                    MessageBox.Show(e.ToString()); }
            }
        }
    }
       public void ReStorMyDB()
    {
        if (MessageBox.Show("All Data Stored in the Database may change!!! \n If you agree, select \"Yes\".", "DataBase ReStore", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {

            SqlConnection.ClearAllPools();
            using (SqlConnection con = new SqlConnection(BackUpConString))
            {
                ServerConnection srvConn = new ServerConnection(con);

                Server srvr = new Server(srvConn);


                if (srvr != null)
                {
                    try
                    {

                        Restore rstDatabase = new Restore();
                        rstDatabase.Action = RestoreActionType.Database;
                        rstDatabase.Database = "taban";
                        OpenFileDialog opfd = new OpenFileDialog();
                        opfd.Filter = "BackUp File|*.taban";
                        if (opfd.ShowDialog() == DialogResult.OK)
                        {


                            BackupDeviceItem bkpDevice = new BackupDeviceItem(opfd.FileName, DeviceType.File);

                            rstDatabase.Devices.Add(bkpDevice);
                            rstDatabase.ReplaceDatabase = true;
                            rstDatabase.SqlRestore(srvr);
                            MessageBox.Show("Database succefully restored", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("ERROR: An error ocurred while restoring the database", "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

        }
    }

I have new method without SMO problems 我有没有SMO问题的新方法

string _server=".\server_name";
string _database="database_name";
string _backUpFile="filefullpath";
string cmd= "Sqlcmd - E - S .\\"+_server+" - Q\" BACKUP DATABASE ["+ _database + "] TO DISK = '"+backUpFile+"' \" ";
System.Diagnostics.Process.Start(cmd);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM