PDA

View Full Version : مشکل در restore کردن



hassan.koohgard
سه شنبه 08 آذر 1390, 12:20 عصر
از کد زیر استفاده میکنم از sql 2008 هم استفاده میکنم
string command = "ALTER DATABASE kargah SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE kargah FROM DISK='" + strFileName + "'";

اما خطای زیر می دهد مشکل کجاست...
error occurred:invalid zero- length device name
.reissue the backup statement with a valid device name.
restore database is terminating.
Nonqualified transactions are being rolled back.
estimated rollback completion 100%
changed database context to 'master

hassan.koohgard
سه شنبه 08 آذر 1390, 17:59 عصر
[QUOTE=hassan.koohgard;1385842]از کد زیر استفاده میکنم از sql 2008 هم استفاده میکنم
string command = "ALTER DATABASE kargah SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE kargah FROM DISK='" + strFileName + "'";


کدم را کامل تغییر دادم جواب گرفتم
خواندن فیل مورد نظر قرار دادن مسیر در یک text و بعد تابع را صدا میزند.

private void button1_Click(object sender, EventArgs e)
{
string strFileName = string.Empty;
openFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restore SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
strFileName = textBox1.Text;
info(strFileName);
}
}

این هم تابع نکته فقط پیغام را تغییردهید.


protected void info(string strFileName)

{
FarsiMessage.ShowMessageBox("در حین عملیات به چیزی دست نزنید.", "پیغام", ShowButton.تائید_تنها, MsgIcon.Information_1);

//ريستور كردن بانک اطلاعاتی
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=kargah;Integrated Security=True;DATABASE=kargah");
try
{
con.Open();
string s1 = "ALTER DATABASE kargah SET OFFLINE WITH ROLLBACK IMMEDIATE";
string query = "RESTORE DATABASE kargah FROM DISK ='" + strFileName + "' WITH RECOVERY,REPLACE";
string s2 = "ALTER DATABASE kargah SET MULTI_USER";

SqlCommand cmd = new SqlCommand();

cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();

cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();


cmd.CommandText = s2;
cmd.Connection = con;
cmd.ExecuteNonQuery();

con.Close();
FarsiMessage.ShowMessageBox("restor به درستی انجام شد.", "پیغام", ShowButton.تائید_تنها, MsgIcon.Information_1);
}
catch
{
FarsiMessage.ShowMessageBox("اشکال در ارتباط با بانک اطلاعاتی.", "پیغام", ShowButton.تائید_تنها, MsgIcon.Information_1);
}

}

مهدی فضلی
پنج شنبه 10 آذر 1390, 18:00 عصر
سلام دوست عزیز
تشکر میکنم از اینکه این کد رو گذاشتی . من که واقعا استفاده کردم . اما یه تغییراتی داخلش دادم

1) میتونی این چند خط رو روی هم بنویسی :

string s1 = "ALTER DATABASE kargah SET OFFLINE WITH ROLLBACK IMMEDIATE";
string query = "RESTORE DATABASE kargah FROM DISK ='" + strFileName + "' WITH RECOVERY,REPLACE";
string s2 = "ALTER DATABASE kargah SET MULTI_USER";

وی دیگه نیاز نیست که هر کدم رو جدا گانه انجام بدی . به اصطلاح اتمیک میشه دستورت

همچنین نیاز نیست که اول file name رو بزاری تو یه textbox و سپس بخونیش . کافیه که دستورتو اینطوری بنویسی

string query = "RESTORE DATABASE kargah FROM DISK ='" + strFileName.ToString() + "' WITH RECOVERY,REPLACE";

از کد هات استفاده کردم و اونها رو به vb.net تبدیل کردم و پروژه پایانی دوره کارشناسیم تمام شد!

بازم مرسی