دوستان این کد بکاپ گیری یه مشکل داره کسی میتونه حلش کنه ؟
فایل بکاپ قبلی رو پاک نمیکنه که بکاپ جدید رو جایگزین کنه
Printable View
دوستان این کد بکاپ گیری یه مشکل داره کسی میتونه حلش کنه ؟
فایل بکاپ قبلی رو پاک نمیکنه که بکاپ جدید رو جایگزین کنه
شرط براش بزار و از کلاس system.io استفاده کن می تونی قبلی رو پاک کنی !
آدرس دهیش چطوره توی مثال شما خوب بود اما چون ریستور نداشت از این کد استفاده کردم خواستم اون شرط شما رو بذارم اما چون مسیر ذخیره سازی توی خود پوشه برنامه هست نمیدونستم چکار کنم
کد کلاس
public static void SettingClass(string SqlCom)
{
com.CommandText = SqlCom;
com.CommandType = System.Data.CommandType.Text;
com.Connection = new SqlConnection(Connectionstring);
SqlDataReader dr = null;
try
{
com.Connection.Open();
dr = com.ExecuteReader();
}
catch
{
}
finally
{
if (com.Connection.State == ConnectionState.Open)
com.Connection.Close();
}
}
کد بازگرداندن فایل پشتیبان Restore
openFileDialog1.FileName = "";
openFileDialog1.Filter = "Backup File|*.bak";
openFileDialog1.Title = "بازیابی بانک اطلاعاتی";
openFileDialog1.ShowDialog();
if (openFileDialog1.FileName != "")
{
String strRestoreCommand = "USE MASTER RESTORE DATABASE [نام بانک] FROM DISK = N'" + openFileDialog1.FileName + "' WITH FILE = 1, NOUNLOAD, " +
"REPLACE, STATS = 10";
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=نام بانک;Integrated Security=True");
try
{
SqlDataReader dr = null;
con.Open();
SqlCommand sqlCommand = new SqlCommand(strRestoreCommand, con);
dr = sqlCommand.ExecuteReader();
MessageBox.Show("بازیابی اطلاعات با موفقیت انجام پذیرفت", "کاربر گرامی");
}
catch
{
return;
}
finally
{
con.Close();
}
دوست عزیز شما کانکشن رو چطور تعریف کردین ؟
با سلام
من یه کد برای restore کرن دیتا بیس نوشتم که از اکثر راههای پیشنهادی دوستان استفاده کردم ولی خطای
exclosive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
changed database context to 'master'
رو میده ، که گویا یه مشکلی با دیتابیس master داره
کسی میدونه مشکل من چیه؟(فقط نگید connection string چون با همین connection کد backup داره درست کار می کنه)
میشه منو راهنمایی کنید؟؟؟؟؟؟؟:افسرده:
Cursor.Current = Cursors.WaitCursor;
try
{
if (File.Exists(@"d:\BackupProjectMelkAra\MelkAra_Db. bak"))
{
if (MessageBox.Show("آیا از جایگزینی اطلاعات فایل پشتیبان گیری اطمینان دارید؟", "جایگزینی فایل پشتیبان", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
//Connect SQL-------ww.papro.blogfa.com--------------------------------
SqlConnection connect;
string con = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\MelkAra_Db.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
//string con = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\MelkAra_Db.mdf;Integrated Security=True;User Instance=True";
connect = new SqlConnection(con);
connect.Open();
//---------------------------ww.papro.blogfa.com-----------------------
//Excute SQL----------------
SqlCommand command;
//command = new SqlCommand("use master", connect);
//command.ExecuteNonQuery();
//command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = N'MelkAra_Db.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
//command = new SqlCommand(@"restore database MelkAra_Db from disk = 'd:\BackupProjectMelkAra\MelkAra_Db.bak'", connect);
command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = 'd:\\BackupProjectMelkAra\\MelkAra_Db.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com------------------------------
connect.Close();
MessageBox.Show("جایگزینی فایل پشتیبانی با موفقیت انجام شد", "جایگزینی فایل پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
MessageBox.Show(@"Do not make any endorsement above (or is not in the correct path)", "Restoration", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
درود، برای restore کردن باید اول دسترسی به بانک رو قطع کنید (در صورت امکان از یه برنامه جانبی استفاده کنید)
من از این کد استفاده می کنم
string connStr2 = "Data Source=.\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
string pro = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
private void radButton2_Click(object sender, EventArgs e)
{
openFileDialog1.DefaultExt = "BAK";
openFileDialog1.FileName = "backup file ";
openFileDialog1.Filter = @"SQL Backup Files (*.BAK)|*.BAK |All Files(*.*)|*.*)";
openFileDialog1.Title = "Backup SQl files";
bool fg = false;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//Drop database
string sql0 = "DROP DATABASE [ِDatabaseName]";
SqlConnection thisconnection0 = new SqlConnection(pro);
SqlCommand mycommand0 = new SqlCommand(sql0, thisconnection0);
try
{
thisconnection0.Open();
mycommand0.ExecuteNonQuery();
}
catch {
fg = false;
MessageBox.Show("خطا در بازیابی پشتیبان،کد 149");
}
finally
{
thisconnection0.Close();
}
bool nj = false;
string connString = "Data Source=.\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
string cmdText = "select * from master.dbo.sysdatabases where name='DatabaseName'";
bool bRet = false;
using (SqlConnection sqlConnection = new SqlConnection(connString))
{
sqlConnection.Open();
using (SqlCommand sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
SqlDataReader reader = sqlCmd.ExecuteReader();
bRet = reader.HasRows;
nj = reader.HasRows;
reader.Close();
}
sqlConnection.Close();
}
if ((fg == true)&&(nj==false))
{
try
{
//restore database
using (SqlConnection conn1 = new SqlConnection(connStr2))
{
string sqlStmt = String.Format("RESTORE DATABASE [ِDatabaseName] from DISK='{0}'", openFileDialog1.FileName);
using (SqlCommand bu3 = new SqlCommand(sqlStmt, conn1))
{
conn1.Open();
bu3.ExecuteNonQuery();
conn1.Close();
}
label1.Text = "با موفقیت انجام شد";
}//end of using connection
}
catch
{
MessageBox.Show("خطا در بازیابی پشتیبان،کد 151");
}
}
else
{
MessageBox.Show("خطا در بازیابی پشتیبان،کد 150");
}
}//end of open dialog
}
امیدوارم کمکتون کنه
موفق باشید
سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19 مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
https://barnamenevis.org/showthread.p...ghlight=backup
اینم تغییراتی که به کدم دادم و درست شد
امیدوارم به درد کسایی که این تاپیک رو می بینند بخوره:بوس:
Cursor.Current = Cursors.WaitCursor;
try
{
if (File.Exists(@"d:\BackupProjectMelkAra\MelkAra_Db. bak"))
{
if (MessageBox.Show("آیا از جایگزینی اطلاعات فایل پشتیبان گیری اطمینان دارید؟", "جایگزینی فایل پشتیبان", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
//Connect SQL-------ww.papro.blogfa.com--------------------------------
SqlConnection connect;
string con = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\MelkAra_Db.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
connect = new SqlConnection(con);
connect.Open();
SqlCommand command;
//بستن تمامی کانکشن ها
string Alter1 = @"ALTER DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf ] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, connect);
Alter1Cmd.ExecuteNonQuery();
// بازگردانی اطلاعات پشتیبانی گرفته شده
command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = 'd:\\BackupProjectMelkAra\\MelkAra_Db.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
command.ExecuteNonQuery();
// باز کردن تمامی کانکشن ها
string Alter2 = @"ALTER DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, connect);
Alter2Cmd.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com------------------------------
connect.Close();
MessageBox.Show("جایگزینی فایل پشتیبانی با موفقیت انجام شد", "جایگزینی فایل پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
}
}
else
MessageBox.Show(@"Do not make any endorsement above (or is not in the correct path)", "Restoration", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
سلام دوستان عزیز این کد رو برای بکاپ استفاده میکنم ولی این خطارو میده
Instance failure
!=پایگاه داده رو داخل خود C# ساختم با sqlExpreess..
با تشگر
public static bool ExecuteQuery(string cmdText)
{
using (SqlConnection con = new SqlConnection(@"Server=.\\SQLEXPRESS;integrated security=true;"))
{
SqlCommand cmd = new SqlCommand(cmdText, con);
cmd.CommandType = CommandType.Text;
try
{
con.Open();
cmd.ExecuteNonQuery();
con.ChangeDatabase("master");
con.Close();
return true;
MessageBox.Show("ok");
}
catch (Exception exp)
{
if (con.State != ConnectionState.Closed)
{
con.ChangeDatabase("master");
con.Close();
}
MessageBox.Show(exp.Message);
return false;
}
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'schoolDataSet.msg' table. You can move, or remove it, as needed.
this.msgTableAdapter.Fill(this.schoolDataSet.msg);
}
private void button1_Click(object sender, EventArgs e)
{
string DataBaseName = "Database1";
string Filepath = @"C:\Users\bcmodir\Desktop\ZABAN\file.bak";
ExecuteQuery("USE master backup database " + DataBaseName + " to disk = '" + Filepath + "'");
}
}
}
با فرض اینکه نام اینستنس شما درست باشه
یا اون (آ دورت بگردم) رو از اول رشته اتصال بردارید. (رجوع شود به کاربرد آ دورت بگردم در سی شارپ)
یا بجای \\ از \ استفاده کنید.
موفق باشید.
اونو درست کردم ولی میگه که دیتابیسی که نوشتید اسمشو وجود نداره؟؟
database does not exist????
عجیبه ها
دیتابیس که اتچ نشده که شما فقط نامش رو نوشتید. باید مسیر کامل دیتابیس رو بنویسید:
string DataBaseName = "|datadirectory|\Database1.mdf";
یا
string DataBaseName = System.IO.Path.Combine(Application.StartupPath, "Database1.mdf");
دو طرف DataBaseName هم براکت بزار:
"USE master backup database [" + DataBaseName + "] to disk = '" + Filepath + "'"
ولی درست نشد دوستان ی خطای میدی خیلی گنگه میگه سینتکس نزدیکه ؟؟؟؟؟
در خط 10 بالا
Incorrect syntax near 'C:\Users\bcmodir\Documents\Visual Studio 2010\Projects\TESTPAYGAH\TESTPAYGAH\bin\Debug\Data base1.mdf'.
نشد دوست عزیز نشدمتن خطا اینه
Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'.
Could not insert a backup or restore history/detail record in the msdb database. This may indicate a problem with the msdb database. The backup/restore operation was still successful.
Changed database context to 'master'.
/// <summary>
/// اجرای کوئری بدون برگشت دیتا
/// </summary>
/// <param name="Query"></param>
/// <returns></returns>
public int ExecuteUpdate(string Query)
{
command.CommandText = Query;
int Code = 0;
try
{
Code = command.ExecuteNonQuery();
ExecuteMessage(Result.Success, null);
return Code;
}
catch(Exception ex)
{
ExecuteMessage(Result.Error,ex.Message);
return Code;
}
}
/// <summary>
/// پشتیبان گیری از دیتابیس با دریافت نام دیتابیس و مسیر ذخیره فایل بک آپ
/// </summary>
/// <param name="BackupDirectory"></param>
/// <param name="DataBaseName"></param>
public void BackupDatabase(string BackupDirectory,string DataBaseName)
{
ExecuteUpdate("BACKUP DATABASE " + DataBaseName + " TO DISK = '" + BackupDirectory + "' ");
}
/// <summary>
/// بازیابی فایل بک آپ با دریافت نام دیتابیس و مسیر فایل بک آپ
/// </summary>
/// <param name="BackupDirectory"></param>
/// <param name="DataBaseName"></param>
public void RestoreBackup(string BackupDirectory, string DataBaseName)
{
string Query = "ALTER DATABASE " + DataBaseName + " SET SINGLE_USER With RollBack IMMEDIATE USE MASTER " +
" RESTORE DATABASE " + DataBaseName + " FROM DISK = '" + BackupDirectory + "' With Replace";
ExecuteUpdate(Query);
}
سلام دوستان عزیز خسته نباشید من یک فرم دارم + دو تا کلید ....
من میخوام از دیتابیسم که اسمش dbtest هست بکاپ بگیرم ولی متاسفانه قابلیت SQLDMO در نسخه 2008 حذف شده یعنی تا نسخه 2000 بوده
حالا میشه یک نمونه سورس به من بدید از گرفتن Backup/Restore به صورت حرفه ای و پیشرفته و 100 درصد هم کار کنه اگر به صورت LINQ اموزش بدید که دیگه عالی میشه چون از ConnectionString خوشم نمیاد !!:لبخند:
ممنون میشم راهنمایی کنید
البته من تاپیک های زیادی در این مورد خوندم مثل زیر ولی همه ایراد داشتن !! برای همین مجبور شدم تاپیک بزنم
نمونه برنامه های کوچک و مفيد در سي شارپ
دوست عزیز SQL-Demo مربوط میشه به SQLServer2000 من از 2008 استفاده میکنم دو لینکی که دادی برای من هیچ کاربردی نداره
برای کسی خوبه که از SQL Server 2000 استفاده میکنه
درنسخه 2008 چیزی به نام SQL DMO وجود نداره
من از برنامه های زیر استفاده میکنم !!!
Microsoft Visual Studio 2010
Microsoft Visual Studio 2012
SQL Server2008
ببن شاید این لینک بدردت خورد البت یه فایله
http://dl.sourcebaran.com/download/152/5Problem.rar
ممنون
از کد زیر که استفاده میکنم خطا میده
SqlConnection sq = new SqlConnection("Data Source=.;Integrated Security=True");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " + txtDBName + " to disk='"
+sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
}//if
خطا از کد زیر است ::
com.ExecuteNonQuery()
یه کد به من بدید که کار کنه و خودتون هم 100 درصد تست کرده باشد .... الان من دو روز هست که دارم روی قسمت بکاپ کار میکنم و به نتیجه هم نمیرسم !!!!
مشکل کاملا حل شد
من الان وقتی دیتابیس ریستور میکنم باید یک بار برنامه ببندم و دوباره باز کنم تا تغییرات ( دیدن اطلاعات ) ببینم
ایا کدی هست برای این کار ؟؟؟؟؟؟
سلام من یک کد Backup گیری و Restore دارم که کد Backup به درستی کار می کند ولی موقعی که کد Restore را اجرا می کنم با خطایی زیر رو به رو می شوم .در ضمن من از Microsoft SQL Server 2008 برای بانک اطلاعاتی خود استفاده می کنم. و در موقع اجرای برنامه آنرا چه ببندم و چه باز باشد باز هم این خطا داده می شود. باید چکار کنم. تا این خطا رفع شود؟:متفکر:
ضمیمه 100171
ضمیمه 100172
https://barnamenevis.org/images/misc/pencil.png
سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19 مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
https://barnamenevis.org/showthread.p...ghlight=backup
سلام
دوستان من یک بانک با sql express خود سی شارپ طراحی کردم بدون sql server نصب باشه آیا امکان داره کد بک آپ و ری استور اون رو دوستان اینجا قرار بدن
با تشکر
میذارمش توی تگ C# که بقیه هم استفاده کنن
کد بکاپ
string bname = DateTime.Now.ToString("yyyyMMddHHmm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup"+bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\LMS_DB.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//گرفتن نام دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات\nلطفا مجدد تلاش كنيد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
کد ریستور
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\LMS_DB.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + openFileDialog.FileName + "';ALTER DATABASE [" + dbname + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
من تست کردم عالیه اگه واسه کسی مشکل داشت شک نکنه که مثل من کانکشنش مشکل داره من کانکشن رو تغییر دادم با اجازه دوستمون
من برای ری استور کردن کردن بانک کد زیر رو میزنم :اما ارورو میده بانک در حال استفادست ...چیکارش کنم؟؟؟Cursor.Current = Cursors.WaitCursor;
try
{
if (File.Exists(@"d:\SQLBackup\svBackUp1.bak"))
{
if (MessageBox.Show("در صورت بازیابی تممی اطلاعات پایگاه داده فعلی از بین رفته و اطلاعات فایل پشتیبان جایگزین میگردد آیا مطمئن هستید؟", "بازیابی", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
//Connect SQL---------------------------------------
SqlConnection connect;
string con = @"Data Source=.;Initial Catalog=arayeshgah1;Integrated Security=True";
connect = new SqlConnection(con);
connect.Open();
//Excute SQL----------------
SqlCommand command;
command = new SqlCommand("use master", connect);
command.ExecuteNonQuery();
command = new SqlCommand(@"restore database arayeshgah1 from disk = 'd:\SQLBackup\svBackUp1.bak'", connect);
command.ExecuteNonQuery();
//----------------------------------
connect.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد.", "Restore", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
MessageBox.Show(@"Do not make any endorsement above (or is not in the correct path)", "Restoration", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
سلام به همه اساتید
قبل از پرسیدن سوال ازتون خواهش میکنم نگید جستجو کن مطلب در این مورد زیاده اگر براتون ممکنه یکبار مراحل رو به صورت کامل توضیح بدین
پیشاپیش ازتون ممنونم
و حالا سوالم
من یه برنامه طراحی کردم که دیتابیسش SQL EXPRESS 2008 هستش موقع نصب نرم افزار روی سیستم مشتری اول موتور SQL EXPRESS 2008 نصب میشه بعد نرم افزار
ConnectionString هم بصورت زیر تعریف شده
"Data source=.\\SQLEXPRESS;Attachdbfilename=|DataDirecto ry|\\db\\AAZ.mdf;Integrated security=true;user Instance=true"
یعنی به خود فایل mdf اشاره میکنه
سوال اول : آیا این دیتابیس الان اتچ شده؟
اگر جواب نه هست باید چیکار کنم تا اتچ بشه
همون موتور SQL EXPRESS 2008 که روی سیستم مشتری هست برای اتچ شدن کافیه یا باید نسخه کامل SQL رو نصب کنم
سوال دوم : چطور میتونم توی برنامه یک فرم بزارم که کاربر هم بتونه از دیتابیس Backup بگیره و هم فایل Backup رو Restore کنه
ازتون خیلی خیلی ممنونم
وبازهم ملتمسانه ازتون میخوام بطور کامل مراحل رو توضیح بدین تا هم من بتونم متوجه بشم و هم بقیه دوستانی که بلد نیستن بعدها براتون دعا کنن
سلام
بفرما دوست عزیز
http://uplod.ir/lhqaizj2czbm/5Problem.rar.htm
این 5 مسئله توش توضیح داده
Connection String
Load Without Attach
Add Picture to SQL
Attach & Detach
BackUp & Restore
موفق باشید
سلام دوباره
دوست عزیز من از کدی که شما داده بودین استفاده کردم
زمان backup مشکلی نیست ولی موقع restore با پیام زیر مواجه میشم
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
سلام
ببین این میتونه کمکت کنه
http://stackoverflow.com/questions/4...base-is-in-use
سلام
من از کد زیر برای بازیابی دیتابیس استفاده میکنم
SqlCommand scom1 = new SqlCommand();
SqlConnection.ClearAllPools();
scom1.Connection = new SqlConnection("Data source=MAHNAZ-PC;Initial Catalog=marketing;Integrated Security=true");
scom1.Connection.Open();
string dbname = scom1.Connection.Database;
scom1.Connection.Close();
SqlConnection sc = new SqlConnection("Data source=MAHNAZ-PC;Initial Catalog=master;Integrated Security=true");
SqlCommand scom = new SqlCommand("use master ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [" + dbname + "] FROM DISK = '" + recovery_path + "' ALTER DATABASE [" + dbname + "] SET MULTI_USER", sc);
//SqlCommand scom = new SqlCommand("ALTER DATABASE [" + dbname + "] SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE [" + dbname + "] FROM DISK = '" + recovery_path + "' ALTER DATABASE [" + dbname + "] SET ONLINE", sc);
sc.Open();
scom.ExecuteNonQuery();
sc.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد ");
ولی در زمان اجرا یک Exception روی خط
scom.ExecuteNonQuery();
نشون میده.
The tail of the log for the database \"marketing\" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.\r\nRESTORE DATABASE is terminating abnormally.\r\nChanged database context to 'master'.\r\nNonqualified transactions are being rolled back. Estimated rollback completion: 100%
لطفا راهنماییم کنید . نمیدونم مشکلش چیه
داره میگه که پارامتر Recovery and replace رو نزاشتین
یک سرچ انجام بدید درباره این کد ، نمونه های کاملی گیرتون میاد
سلام دوستان من از برنامم بكاپ ميگيرم ولي وقتي رستور ميكنم خطا ميده ، اينم متن خطا راهنمايي كنيد لطفا
The tail of the log for the database "m" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
RESTORE DATABASE is terminating abnormally.
منظور از "m" نام ديتابس هست.
private void Restore(string filename)
{
try
{
string command = @"ALTER DATABASE DBName ET SINGLE_USER with ROLLBACK IMMEDIATE " + " USE master " + " RESTORE DATABASE DBName FROM DISK= N'" + filename + "'";
//string command = @"RESTORE DATABASE DBName FROM DISK ='" + filename + "' ";
this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;
SqlConnection oconnection = null;
oconnection = new SqlConnection("Data Source=(local);Initial Catalog=DBName ;user id=sa");
if (oconnection.State != ConnectionState.Open)
oconnection.Open();
ocommand = new SqlCommand(command, oconnection);
ocommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی اطلاعات از نسخه پشتیبان از با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error : ", ex.Message);
}
}
خدمت دوست عزيز هم بگم من سرچ كردم ولي همه كدها و نمونه ها همين مشكل رو داشتند.
البته چند روز اول كه اين كدها رو نوشته بودم خوب كار ميكرد نميدونم چرا يك ماه شده كه ديگه رستور نميكنه و اين ارور رو نمايش ميده
دوست عزيز شما برامون اين خطا رو معني كن ما هم ياد بگيريم اگه زحمتي نيست
از این استفاده کن:
ALTER DATABASE DbName SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE DbName FROM DISK= strFileName WITH FILE = 1, NOUNLOAD, STATS = 10 ,replace ;
ALTER DATABASE DbName SET MULTI_USER with ROLLBACK IMMEDIATE ;