sabalank
سه شنبه 29 اردیبهشت 1388, 22:11 عصر
سلام
من یک ویندوز اپلیکیشن با c#نوشتم که پایگاه داده اش sqlexpress 2005 هست می خوام کدی از برنامه بک اپ بگیرم و بعد restor اش کنم از قطعه کدهای زیر استفاده کردم
برای Backup جواب می ده ولی Restor هیچکدوم کار نمی کنه:
1) backup
saveFileDialog1.FileName="mehrBackup" + PersianDate.Now.Year.ToString() + '-' + PersianDate.Now.Month.ToString() + '-' + PersianDate.Now.Day.ToString() + ".bak";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
string sConnect = Properties.Settings.Default.mehrConnectionString;
string dbName;
using (SqlConnection cnn = new SqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
string bacName = saveFileDialog1.FileName;
BackupDeviceItem bdi = new BackupDeviceItem(@""+bacName, DeviceType.File);
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "ArchiveDataBase:" + PersianDate.Now.ToShortDateString();
bk.BackupSetName = "MehrBackupSet";
bk.Database = dbName;
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.SqlBackup(sv);
this.Cursor = Cursors.Default;
MessageBox.Show("پشتیبان گیری کامل شده است!","پیغام",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
2)restore
string sConnect = Properties.Settings.Default.mehrConnectionString;
string dbName;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
try
{
using (SqlConnection cnn = new SqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
cnn.Close();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
// MessageBox.Show(sv.InstanceName.ToString());
string s = openFileDialog1.FileName;
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@""+s , DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
this.Cursor = Cursors.Default ;
MessageBox.Show("بازیابی داده ها تکمیل شد”);
}
پیغام خطا:
Restore failed for Server 'SAHAR-C0F89F8D1\SQLEXPRESS'.
{"An exception occurred while executing a Transact-SQL statement or batch."}
'C:\\DOCUMENTS AND SETTINGS\\ADMINISTRATOR\\DESKTOP\\MEHRFINALVERSION-EDIT-ABHAR30FFTE\\MEHR\\BIN\\DEBUG\\MEHR.MDF' because it is in use by this session. It is recommended that the master database be used when performing this operation.\r\nRESTORE DATABASE is terminating abnormally."}
من یک ویندوز اپلیکیشن با c#نوشتم که پایگاه داده اش sqlexpress 2005 هست می خوام کدی از برنامه بک اپ بگیرم و بعد restor اش کنم از قطعه کدهای زیر استفاده کردم
برای Backup جواب می ده ولی Restor هیچکدوم کار نمی کنه:
1) backup
saveFileDialog1.FileName="mehrBackup" + PersianDate.Now.Year.ToString() + '-' + PersianDate.Now.Month.ToString() + '-' + PersianDate.Now.Day.ToString() + ".bak";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
string sConnect = Properties.Settings.Default.mehrConnectionString;
string dbName;
using (SqlConnection cnn = new SqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
string bacName = saveFileDialog1.FileName;
BackupDeviceItem bdi = new BackupDeviceItem(@""+bacName, DeviceType.File);
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "ArchiveDataBase:" + PersianDate.Now.ToShortDateString();
bk.BackupSetName = "MehrBackupSet";
bk.Database = dbName;
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.SqlBackup(sv);
this.Cursor = Cursors.Default;
MessageBox.Show("پشتیبان گیری کامل شده است!","پیغام",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
2)restore
string sConnect = Properties.Settings.Default.mehrConnectionString;
string dbName;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
try
{
using (SqlConnection cnn = new SqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
cnn.Close();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
// MessageBox.Show(sv.InstanceName.ToString());
string s = openFileDialog1.FileName;
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@""+s , DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
this.Cursor = Cursors.Default ;
MessageBox.Show("بازیابی داده ها تکمیل شد”);
}
پیغام خطا:
Restore failed for Server 'SAHAR-C0F89F8D1\SQLEXPRESS'.
{"An exception occurred while executing a Transact-SQL statement or batch."}
'C:\\DOCUMENTS AND SETTINGS\\ADMINISTRATOR\\DESKTOP\\MEHRFINALVERSION-EDIT-ABHAR30FFTE\\MEHR\\BIN\\DEBUG\\MEHR.MDF' because it is in use by this session. It is recommended that the master database be used when performing this operation.\r\nRESTORE DATABASE is terminating abnormally."}