PDA

View Full Version : مشکل در restore کردن دیتابیس



alizi73
دوشنبه 22 تیر 1394, 14:37 عصر
با سلام

من از این کد برای restore کردن استفاده میکنم اما خطا میده میشه بگید کجاش اشتباهه؟؟؟؟؟؟؟تو پشتیبان گیری مشکلی ندارم .

private void Restore(string strFileName)
{
try
{
string command = "ALTER DATABASE dbdormitory SET SINGLE_USER with ROLLBACK IMMEDIATE " + " use master " + " RESTORE DATABASE dbdormitory FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
oConnection = new SqlConnection(pr.constr);
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("باز یابی با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
finally
{ oConnection.Close();
}
اینه خطاش
http://uupload.ir/files/y1to_errr.jpg

davidrobert
دوشنبه 22 تیر 1394, 17:11 عصر
این خطا میگه مقدار صفر غیر قابل دریافت نمی باشد.
من کد ریستور و بازیابی دارم برای استفاده از اسکیور سرور که بانک رو بازیابی و بکاپ بگیرم.
http://uplod.ir/dj305bia0otl/Backup_Restore.7z.htm
این سورس و فیلم اموزشی چند ثانیه نگاه کن خیلی عالی هستش اگه دیتابیس با یابی شه در صورت وجود نداشتن اول دیتابیس ایجاد و بازگردانی میشود ولی برای بازگردانی و بکاپ گیری غیر از درایو سی ریستور و بکاپب بشه

alizi73
سه شنبه 23 تیر 1394, 10:33 صبح
این فایلی که گفتی فیلمش با هیچ پلیری باز نمیشه و فایل برنامه هم خالیه.

من فقط تو کئوری ریستور مشکل دارم اگ کسی کمکم کنه ممنون میشم

davidrobert
سه شنبه 23 تیر 1394, 15:03 عصر
دوست عزیز بفرمائید این سورس ریسور کردن من.
private string ReStoreConString = @"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";//Connection String baraye dastresi be data base Master


public void Dispose()
{
GC.SuppressFinalize(this);
}



//-------------------------------------------------------------
public void ReStorMyDB()
{
if (MessageBoxShow.Show("تمام داده دیتابیس تغییر میکنن!!! \n آیا موافق می باشید, انتخاب \"Yes\".","بازگردانی دیتابیس", MessageBoxShow.Buttons.YesNo, MessageBoxShow.Icons.Question) == DialogResult.Yes)
{

SqlConnection.ClearAllPools();
using (SqlConnection con = new SqlConnection(ReStoreConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);

if (srvr != null)
{
try
{

Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "DBAPCS";//Bayad ham nam ba Data base barname tanzim shavad
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "فایل پشتیبان گیری|*.bak";
opfd.Title = "بازگردانی دیتابیس";
if (opfd.ShowDialog() == DialogResult.OK)
{


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

rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
//progressBarX1.Visible = true;

//progressBarX1.PerformStep();
//progressBarX1.Value = 100;
//progressBarX1.Text = "%" + progressBarX1.Value.ToString() + ": درصد بازگردانی";
rstDatabase.SqlRestore(srvr);
//progressBarX1.Value = 0;
//progressBarX1.Visible = false;
MessageBoxShow.Show("بازگردانی دیتابیس موفق آمیز بود.", "سرور", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);
}
}
catch
{
ClsShowMessageBoxError.Error(114, "", "");
}
}
}

}
}
private void بازگردانیToolStripMenuItem_Click(object sender, EventArgs e)
{
ReStorMyDB();
}

این کامپوننت ها رو هم اضافه کن از اسکیول سرورت به رفرینس هاتون
133237

asbabi
چهارشنبه 24 تیر 1394, 12:56 عصر
سلام. بنده اینجوری نوشتم هر وقت دلش خواست جواب میده!!!


try
{
OpenFileDialog op = new OpenFileDialog();
op.Filter = "|*.bak";
DialogResult dr = op.ShowDialog();
if (dr == DialogResult.OK)
{
SqlConnection objConnection = new SqlConnection("server=.; database=nameofdatabase; integrated security=true");
objConnection.Open();
SqlCommand objCommand = new SqlCommand("ALTER DATABASE nameofdatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE" +

" USE master; RESTORE DATABASE nameofdatabase FROM DISK=N'" + op.FileName.ToString() + "' WITH RECOVERY, REPLACE", objConnection);
int Successbackup = objCommand.ExecuteNonQuery();
for (int i = 0; i <= 100; i += 20) { progressBar1.Value = i; }
if (Successbackup != 0)

MessageBox.Show("بازیابی اطلاعات انجام شد");
objCommand.CommandText = "ALTER DATABASE dbnmb SET Multi_User";
objCommand.ExecuteNonQuery();
objConnection.Close();

}
}

catch { MessageBox.Show("خطا در بازیابی اطلاعات\n بازیابی اطلاعات انجام نشد"); }
فقط به جای nameofdatabase باید نام دیتابیس خودتونو بنویسین

dnldrbnd
چهارشنبه 29 مهر 1394, 11:16 صبح
با سلام
دوست عزیز فقط کافیه شما به جای این کد در خط پنجم این کد را جایگذاری کنید
oCommand = new SqlCommand("use master", oConnection);



موفق و پیروز باشید .