سلام من موقع ری استور کردن بک اپ این ارور رو میگیرم.
RESTORE cannot process database 'mobile' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.
اینم کدمه:
con.Open();
SqlCommand command;
command = new SqlCommand(@"restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak'", con);
command.ExecuteNonQuery();
con.Close();
MessageBox.Show(".بازنشانی با موفقیت انجام شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
برای باز گردانی اطلاعات شما باید ابتدا تمامی کانکشن ها تون رو به دیتا بیس موبایل ببندید سپس یک کانکشن به مستر ایجاد کنید نه موبایل بعد باید اون رو ری استور کنید
ممنون فهمیدم مشکل از کجاست
کد باید اینجوری شه.
command = new SqlCommand(@"ALTER DATABASE mobile SET OFFLINE with ROLLBACK IMMEDIATE restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak' WITH REPLACE", con);
سلام به بچه های برنامه نویس میخواستم به اطلاع برنامه نویس های بریسونم اگه کسی با دانت 2010 یا 2012 کار میکنی میتونه از دستورات که برای کار با دیتابیس و هم همین طور این دستورات Backup و Restore استفاده کنی بدون هیچ مشکلی اگه در صورت اینکه با مشکل بر خورد کرد بدانه که کامپیوننت DevComponents و Telerik اجازه نمیدهد که از دستورات استفاده کنه و باعث میشه با پیغام خطا مواجه بیشه و برنامه کار نکونه و اطلاعات رو از دیتابیس نخونه و بکاپ و ریستور برنامه نده اگه کسی با همچین چیزی مواجه بدون کار این 2 تا کامپوننت هستش که نصب شده و این 2 تا عذت میکنن من این دستورات بکاپ و ریستور رو جواب نگرفتم وقتی کامپوننت های DevComponentsو Telerik رو نصب کردم با مشکل برخورد کردم ولی ویندوز روو عوض کردوم و دانت نت و اسکول سرور رو نصب کردم دوباره درست شد و بکاپ و ریستور گرفت این اطلاعی رو به این دلیل میریسونم کسی با مشکل بر خورد کرد با دیتابیس و بکاپ ریستور بدانه اشکال رو این 2 تا ایجاد کردن..
سلام.از دوستان کسی میتونه کد زیر رو برای بازگردانی اطلاعات در سی شارپ توضیح بده?جای school یا mine و single user چیه؟کدوم قسمت هاش باید عوض بشه؟
private void Restore(string strFileName)
{
try
{
string command = "ALTER DATABASE school SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE mine FROM DISK='" + strFileName + "'";
}
سلام
اخرین پست این تاپیک
موفق
سلام من ی قطعه کد میخام که بتونم از داده های جدولم بکاپ بگیرم و بتونم بازیابیش کنم
سلام دوست عزیز
این کدی که من تو برنامه هام استفاده میکنم یه نگاهی بنداز مشکلی نداره اگه متوجه نشدی برات توضیح میدم ، قبلش SaveFileDialog به فرمت اضافه کن
بک آپ گیری
SqlConnection sq = new SqlConnection("server=(local);database=RSR;integra ted security=true;");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " + RSR + " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
بازیابی
SqlConnection sq = new SqlConnection("server=(local);database=RSR;integra ted security=true;");
OpenFileDialog ofd = new OpenFileDialog();
SqlConnection.ClearAllPools(); // برای از بین بردن کانکشن ها از بانک
ofd.Title = "Select Backup file";
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
String query = "USE [master]; RESTORE DATABASE [" + RSR + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = new SqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
جواب نگرفتم
به RSR خطا گرفت(ابتدای برنامه نوشتم
publicstring RSR
خطا بر طرف شد )
تغییر دومی که دادم این بود آدرس پایگاه دادم که
SQLEXPRESS رو با آدرسی که داده بودید عوض کردم
(اگه بخام از داده های یک جدول خاص داخل فرمم بکاپ بگیرم چی )
به جای RSR نام بانک نو بزار آقا محمود عزیز
سلام
این کد بکاپ گیریم هستش که به اسم پایگاه دادم که library هستش قبل از این که برنامه رو اجرا کنم خطا میگیره
SqlCommand com = newSqlCommand("backup database " + Library + " to disk='" + sfd.FileName + "'", sq);
در بازیابی هم همین مشکل هست
این هم سورس کامل برنامه
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
publicpartialclassForm1 : Form
{
public Form1()
{
InitializeComponent();
}
privatevoid button1_Click(object sender, EventArgs e)
{
SqlConnection sq = newSqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
SaveFileDialog sfd = newSaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = newSqlCommand("backup database " + Library + " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
privatevoid button2_Click(object sender, EventArgs e)
{
SqlConnection sq = newSqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
OpenFileDialog ofd = newOpenFileDialog();
SqlConnection.ClearAllPools(); // برای از بین بردن کانکشن ها از بانک
ofd.Title = "Select Backup file";
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
String query = "USE [master]; RESTORE DATABASE [" + Library + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = newSqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
لینک دانلود نحوه بک آپ گیری و بازیابی
http://s4.picofile.com/file/77946702..._sql_.rar.html
سلام دوستان خسته نباشید برای بک اپ گیری با سی شارپ ایا مدل دیتابیسها فرق میکنه منظورم اکسپرس و یا نسخ کامل هست ؟؟؟ اگر کسی از دوستان کد بک اپ و ریستور رو داره با مدلهای مختلف بانک بزاره ممنون میشم
بکاپ
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();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
}
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();
progressBar2.PerformStep();
progressBar2.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar2.Value = 0;
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
این کد نام دیتابیس رو بر اساس تاریخ و زمان ذخیره میکنه و ریستور کردن هم میتونه بر اساس همون تاریخ و زمان باشه
اکسپرس هم بوده اما فکر نکنم تفاوتی داشته باشه
این کد ها هم واسه پروسس بار هست اگه نخواستی میتونی پاکش کنی
progressBar1.PerformStep();
progressBar1.Value = 100;
progressBar2.Value = 0;
درود بر همه شما دوستان
چطور می شه با استفاده از کدهای سی شارپ از برنامه ای که دیتابیس اون به
SQL SERVER 2008 متصل هست بک آپ و Restore نوشت؟؟؟
تاکید می کنم با SQL Express رو نمی خوام با دیتابیسی که به SQL SERVER 2008 وصل هست رو می خوام ممنونم می شم دوستان راهنمایی کنن
سلام
این PROCEDURE رو با SqlCommand در برنامه فراخوانی کن
CREATE PROCEDURE sp_backup
AS
BEGIN
BACKUP DATABASE [YourDatabase] TO DISK = N'C:\YourPathAndFile.bak'
WITH NOFORMAT, NOINIT,
NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
END
GO
نمونه های دیگر و Restore
SQL = @"RESTORE DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";
Cmd = new SqlCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();
SQL = @"USE master BACKUP DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";
Microsoft.SqlServer.Management.Smo.Server smoServer =
new Server(new ServerConnection(server));
Database db = smoServer.Databases['MyDataBase'];
string dbPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase.mdf');
string logPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase_Log.ldf');
Restore restore = new Restore();
BackupDeviceItem deviceItem =
new BackupDeviceItem('d:\MyDATA.BAK', DeviceType.File);
restore.Devices.Add(deviceItem);
restore.Database = backupDatabaseTo;
restore.FileNumber = restoreFileNumber;
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.SqlRestore(smoServer);
db = smoServer.Databases['MyDataBase'];
db.SetOnline();
smoServer.Refresh();
db.Refresh();
این Microsoft.SqlServer.Management.Smo.Server smoServer چی هست؟؟؟ چطوری بشناسونمش به visual studio ؟؟؟؟
درسته قدیمیه ولی چون بدون پاسخ کامل مونده جوابشو میدم.
این اررور وقتی داده میشه که شما در دستور بکاپ یا رستورتون مسیر فایل مربوطه رو نداده باشین یا اشتباه داده باشین
باسلامبعد از اینکه Backup می گیرم برای restore کردن ی چنین پیغامی رو میده نمیدونم مشکل چیه. لطفا ی راهنمایی کنید.(از SQLServer 2012 و VS 2010 استفاده می کنم)
آخرین ویرایش به وسیله mohammadseven : یک شنبه 16 تیر 1392 در 17:34 عصر دلیل: تکمیل
backup در سی شارپ
من کد نمیخوام از طریق دیگه میخوام از پروژه ای که نوشتم بک آپ بگیرم
Backup:
private void bbackup_Click(object sender, EventArgs e)
{
String Strbackup1,Strbackup2;
DateTime dteDate;
dteDate = DateTime.Now;
Strbackup2 = Application.StartupPath + @"\backup\" ;
saveFileDialog1.FileName = Strbackup2 ;
saveFileDialog1.InitialDirectory = Strbackup2;
saveFileDialog1.ShowDialog();
textBox1.Text = saveFileDialog1.FileName;
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database YOURDB to disk = '" + @textBox1.Text.ToString() + "'");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con ;
con.Open();
cmd.ExecuteNonQuery();
this.Close();
}
restor :
private void bbackup_Click(object sender, EventArgs e)
{
openFileDialog1.Title = "بازيابي اطلاعات";
openFileDialog1.FileName = "*.bak";
openFileDialog1.InitialDirectory = Application.StartupPath.ToString() + @"\backup\";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE YOURDB SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE YOURDB FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE YOURDB SET MULTI_USER");
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
this.Close();
}
ممنون
این کد ها را در کلیک دکمه بگذارم دیگه؟
savefiledialog مشکلش حل شد فقط text box برای چیه
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
از این هم خطا گرفته
textbox محلی کی قصد دارید فایل بک آپ اونجا ذخیره بشه داخلش هست .
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
از این هم خطا گرفته اینو چکار کنم
به جای Database.cn باید کانکشن استرینگت را قرار بدی . توی این مثال میره از یک کلاس می خونه . شما مستقیم بهش مقدار بده . مثلا اینجوری :
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("server=. ; database=dbname ; uid=sa ; pwd=1234;");
ممنون
وقتی backup می گیرد فایل بدون پسونده در نتیجه وقتی می خواهم بازیابی کنم فایل را نمی بیند
دوست عزیز می خواهید من کل پروژه را اینجا قرار بدم ؟ یه ذره سرچ کنید بد نیست .
Strbackup1 = dteDate.Hour.ToString() + "_" + dteDate.Minute.ToString() + ".bak";
Strbackup2 = Application.StartupPath + @"\backup\" ;
saveFileDialog1.FileName = Strbackup2 + Strbackup1 ;
بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
کد کپیو خواستی بگو واسط بزارم ... !!!
System.IO.File.Copy(Application.StartupPath + "/1", "2");
1=اسم بانکت
2=ادرسی که میخوایی بکاپ اونجا ذخیره شه ... !!
برای رستور هم :
System.IO.File.ِDelete(Application.StartupPath + "/1");
بانکو پاک کن بعد با دستور زیر بکاپو کپی کن کنار برنامه
System.IO.File.Copy( "1", Application.StartupPath +"/2");
1=آرس بکاپ
2=اسم بانکت ... !!