PDA

View Full Version : backup and restore گرفتن پشتیبان از دیتابیس و بازگردانی آن



صفحه : [1] 2

mnasrin
دوشنبه 16 آذر 1388, 16:01 عصر
backup and restore در سی شارپ
در قسمت های مختلف دوستان توضیح دادهاند ولی هیچکدام کار نمی کند
لطفا یکی کمک کنه

amirjalili
دوشنبه 16 آذر 1388, 17:13 عصر
این حتما کار میکنه.. همین الان خودم نوشتم و تستش کردم.



public void SqlRestorActions(string ConnectionString)
{
SqlConnection DBConnection = new SqlConnection(ConnectionString);
SqlCommand DBCommand = new SqlCommand("RESTORE DATABASE DBNAME FROM DISK = N'C:\\' WITH FILE = 1, NOUNLOAD, STATS = 10", DBConnection);
;
DBConnection.Open();
DBCommand.ExecuteNonQuery();
DBConnection.Close();
}

public void SqlBackupAction(string ConnectionString)
{
SqlConnection SC = new SqlConnection(ConnectionString);
string sqltxt = "";

sqltxt = @"BACKUP DATABASE DATABASENAME TO DISK ='C:\\TEST.bac' WITH REPLACE ";
SqlCommand Command = new SqlCommand(sqltxt, SC);
SC.Open();
Command.ExecuteNonQuery();
SC.Close();
}



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

ehsan11
یک شنبه 27 دی 1388, 22:03 عصر
سلام
من وقتی می خوام backup گرفته شده رو restore کنم خطای زیر رو میده کسی میدونه علتش چیه
Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master

با تشکر

ehsan11
یک شنبه 27 دی 1388, 22:16 عصر
سلام
نه موقع backup گیری ارور نمیده و restore را با کد


string command = "ALTER DATABASE Pubs SET SINGLE_USER with ROLLBACK
IMMEDIATE " +
"use master " +
" RESTORE DATABASE Pubs FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.;Initial
Catalog=Pubs;Integrated Security=True");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(Sqlcommand, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;


نوشتم

خطا


Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master


و
بعضی اوقات خطا میده که نمیتونه دیتابیس رو باز کنه

با تشکر

slashslash2009
دوشنبه 28 دی 1388, 23:14 عصر
private void Restore(string strFileName)
{
try
{
//readfile();
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.\\sqlexpress;Initial catalog=master;Integrated Security=true";
//con.ConnectionString = "Data Source=.;Initial catalog=master;Integrated Security=true";
SqlCommand cmd = new SqlCommand();
con.Open();
string query = "USE master RESTORE DATABASE [databasename] FROM DISK ='" + strFileName + "'WITH RECOVERY, REPLACE";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی به درستی انجام شد\nدوباره وارد برنامه شوید");
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
}

razavi_university
سه شنبه 29 دی 1388, 08:12 صبح
هرچند این سوال بارها پرسیده و جواب داده شده ولی برای اینکه تاپیک بدون جواب به زیر خروار تاپیک های دیگر نرود



Microsoft.SqlServer.Management.Smo.BackupDeviceIte m bdi = new BackupDeviceItem(fileName+"DB-Back-" + DateTime.Now.ToString().Replace('/', '-').Replace(':','-'), DeviceType.File);

Backup bu = new Backup();
bu.Database = Paya.Properties.Settings.Default.DBName;
bu.Devices.Add(bdi);
bu.Initialize = true;

// add percent complete and complete event handlers
bu.PercentComplete += new PercentCompleteEventHandler(Backup_PercentComplete );
bu.Complete += new ServerMessageEventHandler(Backup_Complete);

Microsoft.SqlServer.Management.Smo.Server server = new Server(Paya.Properties.Settings.Default.ServerName );
bu.SqlBackup(server);




Server server = new Server(Paya.Properties.Settings.Default.ServerName );

BackupDeviceItem bdi = new BackupDeviceItem(fileName, DeviceType.File);

Restore r = new Restore();

r.Database = Paya.Properties.Settings.Default.DBName;
r.ReplaceDatabase = true;
r.Devices.Add(bdi);

//add percent complete and complete event handlers
r.PercentComplete += new PercentCompleteEventHandler(Restore_PercentComplet e);
r.Complete += new ServerMessageEventHandler(Restore_Complete);

r.SqlRestore(server);

ehsan11
سه شنبه 29 دی 1388, 10:42 صبح
سلام
هر بار نمی خوام backup بگیرم اما اگه من یه رکورد جدید به دیتا بیس اضافه کنم و backupبگیرم باید همون موقع بکاپ رو restore کنم در غیر این صورت اگه از برنامه خارج شدم و دوباره وارد شدم دیگه restore نمیکنه
و همون خطا رو میده


Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master


اصلا این خطا معنیش چیه ؟

ehsan11
پنج شنبه 01 بهمن 1388, 23:26 عصر
سلام
ببخشید زیادی دارم اذیت میکنم
من موقع restore هیچ کاری انجام نمیدم فقط برنامه رو اجرا و بعدش restore ولی باز این خطا رو میده
این خطا معنیش چیه؟ بعدش تنظیم خاصی تو sql نداره؟
ممنون میشم

sagad_13
چهارشنبه 12 اسفند 1388, 11:21 صبح
با سلام
من توی سایت کلی جستجو کردم ولی متاسفانه مطالبی که در مورد بکاپ گیری از دیتابیس تو sqlexpress بود هیچ کدوم جوابگو نبود و هرکدوم یه پیغام خطایی می داد
از دوستان خواهش می کنم بکاپ گیری و ریستور رو به صورت کامل در sqlexpress آموزش بدن تا این موضوع تو این تاپیک حل بشه
(دیتابیسم فایل های mdf و ldf هستش)
با تشکر

SMRAH1
چهارشنبه 12 اسفند 1388, 12:37 عصر
سلام
بارها این سئوال مطرح شده و بار ها هم جواب داده شده و حتما کار می کنه که کسی ایرادی رو مطرح نکرده (یک نمونه رو خودم گذاشتم که الان در برنامه هام دارم استفاده می کنم و کار میکنه)!
حالا اگر «هرکدوم یه پیغام خطایی می داد» رو کامل توضیح بدی،میشه راهنمایی کرد که ایراد کار «شما» کجاست یا ایراد کد!
موفق باشید

sagad_13
شنبه 15 اسفند 1388, 10:30 صبح
salam dooste man
man harchi emtehan kardam javab nadad
shayad eirad tooye connection stringame
esme data basam dbase.mdf hastesh
mishe begi conectionesh chi bayad bashe
ba tashakkor

ASKaffash
شنبه 15 اسفند 1388, 11:08 صبح
salam dooste man
man harchi emtehan kardam javab nadad
shayad eirad tooye connection stringame
esme data basam dbase.mdf hastesh
mishe begi conectionesh chi bayad bashe
ba tashakkor
سلام
اتفاقا محتوای ConnectionString مهم است ConnectionString شما چیست ؟

sagad_13
شنبه 15 اسفند 1388, 11:43 صبح
کانکشن من اینه


Data Source=.\\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+"\\dbase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True

ASKaffash
شنبه 15 اسفند 1388, 11:55 صبح
سلام
خودش است این ConnectionString نمی تواند ConnectionString را عوض کنید و از روش AttachDbFilename استفاده نکنید

sagad_13
شنبه 15 اسفند 1388, 12:00 عصر
سلام
میشه بگید باید چیکار کنم.یعنی بیشتر توضیح بدید ممنون میشم.
این کانکشن تو کل برنامه جواب داده بغیر از همین بکاپ و ری استور کردنش

ASKaffash
شنبه 15 اسفند 1388, 13:52 عصر
سلام
با این ConnectionString مشکل شما حل می شود :


"Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + DataBaseName + ";server=";

sagad_13
شنبه 15 اسفند 1388, 15:51 عصر
سلام
بازم نشد
پیغام زیر رو میده.
تو ضمیمه کدی هم که نوشتم مشخصه

ASKaffash
یک شنبه 16 اسفند 1388, 08:06 صبح
سلام
بازم نشد
پیغام زیر رو میده.
تو ضمیمه کدی هم که نوشتم مشخصه
سلام
باید DataBase شما به SQLExpress قبلا Attached شده باشد

sagad_13
یک شنبه 16 اسفند 1388, 08:19 صبح
سلام
کل برنامه ی من با اون کانکشن استرینگی که کد اتچ رو داره کار می کنه(یعنی بانک اتچ شده) درسته؟
فقط تو این قسمت بکاپ گیری من این کانکشن استرینگی که شما دادین رو گذاشتم که بازم کار نمی کنه و اون پیغام رو می ده.
اگه اتچ نیست لطفا بگین چطور اتچ بشه؟
ممنون

ASKaffash
یک شنبه 16 اسفند 1388, 09:08 صبح
سلام
خیر Attached نشده است با استفاده از Sp بنام Sp_Attached اولین بار باید اتصال صورت گیرد بعد بقیه مراحل...

sagad_13
یک شنبه 16 اسفند 1388, 10:39 صبح
سلام
میشه کامل بهم توضیح بدین
(در ضمن ممنونم که این مشکل منو پیگیری می کنین)

ASKaffash
یک شنبه 16 اسفند 1388, 13:06 عصر
سلام
باید این مراحل را طی کنید تا با ConnectionString اعلام شده بتوانید Backup بگیرید :
- در ابتدای برنامه یک ارتباط با بانک Master برقرار کنید اگر خطا دریافت شد که SQLExpress احتمالا ندارید
- اگر به یک شی درون بانک خودتان ارتباط برقرار نکردید باید SP_Attached را برای ارتباط با بانک ولی با ConnectionString به جدول master اجرا کنید
پس از این مرحله با ConnectionString اعلام شده Backup و Restore خواهید داشت
یک حسن دیگر هم این است که وقتی attached می کنید بدون Stop اس کیو ال نمی توان بلائی سر بانک آورد.

sagad_13
یک شنبه 16 اسفند 1388, 16:44 عصر
سلام
یکم برا من سخت فهمیدنش
اینکه گفتی مستر رو ارتباط بدم.از منوی tool گزینه ی connect to database رو زدم و بانک رو نشونم داد(.\sqlexpress)
ولی بقیشو نفهمیدم
میشه مرحله ای برای یه نفر مبتدی توضیح بدی
ممنون

ASKaffash
دوشنبه 17 اسفند 1388, 08:30 صبح
سلام
نمی خواستم کد بذارم ولی مجبور شدم :

string MyDataBase = "Test";
string MyPathName = @"D:\Temp";
string Master_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=master;server=";
string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
try
{
var C = new SqlConnection(Master_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
}
catch { }

اینطوری اگر بانک شما متصل نباشد متصل میشود این مثال 2000 قرار دادم شما از ConnectionString مربوط به SQLExpress استفاده کنید

sagad_13
دوشنبه 17 اسفند 1388, 12:43 عصر
سلام
واقعا خسته نباشید و ممنونم.
من این کد رو میزارم بعدشم دستورات بکاپ رو می نویسم ولی بازم جواب نمی ده
دیتابیس من تو مسیر استارت آپ نصب برنامس. آدرس هارو هم گذاشتم و لی بازم همون پیغام قبلی رو داد
دیگه از چی میتونه باشه؟

ASKaffash
دوشنبه 17 اسفند 1388, 12:48 عصر
سلام
پیام را قرار دهید چون من با همین روش اصلا مشکلی ندارم.
اینهم SP مربوط به Backup گیری :


CREATE Proc BacKUpApplication
@DBDrv VarChar(1000),
@DBStr VarChar(200)
As
Declare @DBPath VarChar(1000),@DBBack VarChar(150)
Set @DBPath=@DBDrv+@DBStr+'_BackUp.Bak'
Set @DBBack=@DBStr+'_BackUp'
ExEc sp_addumpdevice 'disk',@DBBack,@DBPath
ExEc('BackUp DataBase '+@DBStr+' To '+@DBStr+'_BackUp')

sagad_13
دوشنبه 17 اسفند 1388, 13:08 عصر
سلام
این کدی که نوشتین که vb هستش
من با سی شارپ دارم می نویسم
شاید بخاطر اینه که نمیشه؟

ASKaffash
دوشنبه 17 اسفند 1388, 13:10 عصر
سلام
VB ؟ نه با #C است.

sagad_13
دوشنبه 17 اسفند 1388, 13:29 عصر
ببخشید اشتباه شد
الان به عنوان یه دستور sql فرستادمش
پارامترهاش هم یه جورایی تعریف کردم
ولی بازم پیغام میده که
excute non query: connection property has not been instalize
میشه یه نمونه برنامه بنویسین(ممنون میشم چون دیگه داره خستم میکنه)

ASKaffash
دوشنبه 17 اسفند 1388, 13:53 عصر
سلام
اینطوری :

try
{
string MyDB = "ForTesting";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch { }

sagad_13
دوشنبه 17 اسفند 1388, 14:53 عصر
سلام
کدی که نوشتم اینه:

string MyDataBase = "dbase";
string MyPathName = Application.StartupPath;
string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";
string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
try
{
var C = new SqlConnection(Master_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
C.Close();
}
catch
{
MessageBox.Show("0");
}
try
{
string MyDB = "dbase";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch
{
MessageBox.Show("1");
}
الان بازم جواب نمیده و تو جفه catch ها میره
ایرادش چیه؟:ناراحت:

ASKaffash
دوشنبه 17 اسفند 1388, 15:01 عصر
سلام
کدی که نوشتم اینه:

string MyDataBase = "dbase";
string MyPathName = Application.StartupPath;
string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";
string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
try
{
var C = new SqlConnection(Master_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
C.Close();
}
catch
{
MessageBox.Show("0");
}
try
{
string MyDB = "dbase";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch
{
MessageBox.Show("1");
}
الان بازم جواب نمیده و تو جفه catch ها میره
ایرادش چیه؟:ناراحت:

سلام
قسمت قرمز رنگ باید به بانک master اشاره کند
string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";

string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=master;server=";
بار اول باید اجرا شود و هربار که بانک متصل نباشد نیز اجرا می شود

sagad_13
دوشنبه 17 اسفند 1388, 15:17 عصر
سلام
قسمت قرمز رنگ رو به این کد تغییر دادم

Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True
ولی بازم نشد
قسمت سبز رنگ رو هم منظورتونو نفهمیدم که چجوری باید تغییرش بدم
بازم همون مشکل رو داره

sagad_13
سه شنبه 18 اسفند 1388, 08:22 صبح
سلام
فکر کنم دیگه خسته شدین
ولی هنوز این مشکل من حل نشده
میشه کمک کنید

ASKaffash
سه شنبه 18 اسفند 1388, 08:27 صبح
سلام
این مثال برای 2000 است برای 2005 باید این تغییر را ایجاد کنید:

string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";

قسمتهای قرمز رنگ باید متناسب با فایل Data و Log شما تغییر کند
نام کامل Log و Data شما چیست ؟

sagad_13
سه شنبه 18 اسفند 1388, 09:25 صبح
سلام
اسم دیتابیسمdbase.mdf و لاگ فایلش همdbase_log.ldf هستش
این کد هم الان جواب نداد.میشه بگید کجاش ایراد داره

string MyDataBase = "dbase";
string MyPathName = Application.StartupPath;

string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF";
try
{
var C = new SqlConnection(MyDB_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
C.Close();
}
catch
{
MessageBox.Show("0");
}
try
{
string MyDB = "dbase";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch
{
MessageBox.Show("1");
}

ASKaffash
سه شنبه 18 اسفند 1388, 10:45 صبح
سلام
اگر Path شما صحیح باشد اینطوری است :

string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\dbase.mdf',@filename2 = N'" + MyPathName + @"\dbase_log.ldf'";

sagad_13
سه شنبه 18 اسفند 1388, 10:58 صبح
سلام
پسش رو هم درست کردم باز.
ولی نشد
میره تو کتچ:گریه:

ASKaffash
سه شنبه 18 اسفند 1388, 12:50 عصر
سلام
درون بلاک اول فقط اولین بار باید برود وباردوم به بعد به catch میرود ولی در catch دوم نباید برود

sagad_13
سه شنبه 18 اسفند 1388, 14:25 عصر
سلام
هردفعه خطا میده و میره تو کتچ
کد رو که دیدی دوست من.
دیگه از چی میتونه باشه؟

طبیب دل
سه شنبه 25 اسفند 1388, 11:43 صبح
من برای ریستور از دستور زیر استفاده میکنم


ALTER DATABASE SandoghFamily SET SINGLE_USER with ROLLBACK IMMEDIAT use master; RESTORE DATABASE SandoghFamily FROM DISK='" + openFileDialog1.FileName + "'");

ولی خطای زیر رو میده


The tail of the log for the database "SandoghFamily" 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.

چی کار کنم؟

طبیب دل
سه شنبه 25 اسفند 1388, 12:29 عصر
خواهش میکنم کمک کنید
مشکل حیاتیه

pooyasd
سه شنبه 25 اسفند 1388, 13:56 عصر
بک آپ دیگه ای رو امتحان کن این بک آپ ناقص و یا در حالاستفاده در جای دیگه ای هست .
راستی بک آپو با چی میگیری.

طبیب دل
سه شنبه 25 اسفند 1388, 17:34 عصر
بک آپ دیگه ای رو امتحان کن این بک آپ ناقص و یا در حالاستفاده در جای دیگه ای هست .
راستی بک آپو با چی میگیری.
کد بکاپ گیری


backup database SandoghFamily to disk='" + saveFileDialog1.FileName + "'"

csharpprogramer88
سه شنبه 14 اردیبهشت 1389, 10:22 صبح
سلام به همه عزيزان
يادآوري مهم : من ديتابيس خودم را در مسير bin\Debug كپي كردم و از كانكشن استرينگ اون استفاده مي كنم .
من با كد زير از ديتابيسم back up گرفتم



if (DialogResult.Yes == MessageBox.Show("كليك كنيدوباپشتيباني نرم افزارتماس بگيريدno كليك كنيدازاطلاعاتي كه تاامروز تهيه كرديدنسخه پشتيبان تهيه ميگردددرصورتيكه ازاين دكمه اطلاعي نداريدرويyes اگرروي", "اخطار", MessageBoxButtons.YesNo))
{
MessageBox.Show("در ح?ن عمل?ات به چ?ز? دست نزن?د");
if (!Directory.Exists("c:\\backup banketelaat"))
{
Directory.CreateDirectory("c:\\backup banketelaat");
}
try
{
con.Open();
string query = "BACKUP DATABASE master TO DISK = 'C:\\backup banketelaat\\ensani.MDF'";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("پشت?بان گ?ر? به درست? انجام شد");
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعات?");
}
}


كه بدون مشكل اجرا شده ولي با كد زير كه از سايت جستجو كردم restore مي كنم ارور مي ده


con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
try
{
con.Open();
string s1 = "ALTER DATABASE ensani SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE ensani SET MULTI_USER";
string query = "RESTORE DATABASE ensani FROM DISK ='C:\\backup banketelaat\\ensani.MDF' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();

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

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

con.Close();
MessageBox.Show("restor به درستی انجام شد");
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");

}


دوستان لطف كنن و پاك نكنن چون جستجو كردم واين كدها را از سايت گرفتم البته همين كد restor زماني كه در مسير خود sql وجود دارد يعني بانك را در مسير bin\Debug كپي نكردم بدون مشكل اجرا ميشود .
ارور صادره :

M.YasPro
سه شنبه 14 اردیبهشت 1389, 10:29 صبح
سلام
فایل بک اپ ساخته میشه ؟

csharpprogramer88
سه شنبه 14 اردیبهشت 1389, 10:57 صبح
سلام
فایل بک اپ ساخته میشه ؟

سلام
تشكر كه جواب دادي
بله back up بدون هيچ مشكلي اجرا ميشه ولي restor ارور ميده

M.YasPro
سه شنبه 14 اردیبهشت 1389, 11:35 صبح
دوست عزیز این پیغام میگه شما یا اجازه دسترسی به دیتابیس رو نداری یا فایل دیتا بیس وجود نداره !
توی بک اپ و ریستور از یه کانکشن استرینگ استفاده می کنی ؟

hojjatshariffam
سه شنبه 14 اردیبهشت 1389, 11:46 صبح
فکر کنم کاربری که ساختی تو دیتابیست ، دسترسی به تغییر اساسی در DDL رو نداره

کاربرتو ادمین کن بعد یه بار دیگه امتحان کن

اگه جواب داد می تونی توسط دوستان متخصص DBMS یه نوع یوزر مجاز و خاص درست کنی که کارت راه بیوفته

csharpprogramer88
سه شنبه 14 اردیبهشت 1389, 12:18 عصر
بله از يك كانكشن استرينگ استفاده مي كنم البته يوزر خاصي تعريف نكردم دوست من به اين نكته توجه كن كه در حالتي كه ديتابيس را اتچ و در مسير bin\Debug كپي نكرده بودم و از اس كيوال استفاده مي كردم مشكلي نداشت و درست اجرا ميشد

M.YasPro
سه شنبه 14 اردیبهشت 1389, 12:27 عصر
con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+"\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

csharpprogramer88
سه شنبه 14 اردیبهشت 1389, 12:47 عصر
con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+"\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")


دوست من كانكشن شمارا هم نوشتم نشد

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

روي اين قسمت ارور بالارا صادر مي كنه

csharpprogramer88
چهارشنبه 15 اردیبهشت 1389, 23:45 عصر
دوستان تو را به خد ا بررسي كنيد

com_engineer_ab
چهارشنبه 15 اردیبهشت 1389, 23:51 عصر
دوستان تو را به خد ا بررسي كنيد

backup:

#region CreateBackup
public static bool CreateBackup(string filename)
{
bool sign = false;
string file = Path.GetFileName(filename);
string backupDir = "";
RegistryKey registry;
try
{
registry = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Microsoft SQL Server").OpenSubKey("MSSQL.1").OpenSubKey("MSSQLServer");
backupDir = registry.GetValue("BackupDirectory").ToString();
}
catch (Exception ex)
{
Error = ex.Message;
//throw new Exception(" .\n .", ex);
}
string dbName = GetDatabaseName();
//server = GetDatabaseServer();
try
{
IDbConnection connection = newSqlConnection(string.Format("Server={1};initial catalog={0};Integrated Security=SSPI", dbName, server));
connection.Open();
IDbCommand command = connection.CreateCommand();
command.CommandText = "BACKUP DATABASE " + dbName + " TO DISK=N'" + file + "' WITH FORMAT";
command.ExecuteNonQuery();
File.Copy(backupDir + "\\" + file, filename, true);
File.Delete(backupDir + "\\" + file);
connection.Close();
sign = true;
}
catch (Exception ex)
{
Error += ex.Message;
sign = false;
}
//finally
//{
// try
// { connection.Close(); }
// catch (Exception ex) { }
//}
return sign;
}
#endregion





restore

#region RestoreBackup
public static bool RestoreBackup(string filename, string Database_Name)
{
bool sign = false;
// server = ".\\SQLEXPRESS";
string file = Path.GetFileName(filename);
string backupDir = "";
RegistryKey registry;
try
{
registry = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Microsoft SQL Server").OpenSubKey("MSSQL.1").OpenSubKey("MSSQLServer");
backupDir = registry.GetValue("BackupDirectory").ToString();
}
catch (Exception ex)
{
Error = ex.Message;
//throw new Exception(" .\n .", ex);
}
string dbName = GetDatabaseName();
IDbConnection connection = newSqlConnection(string.Format("Server={1};initial catalog={0};Integrated Security=SSPI", dbName, server));
connection.Open();
IDbCommand command = connection.CreateCommand();
string defaultDB = connection.Database;
string tmpBackupFile = backupDir + "\\" + file;
System.Data.IDbTransaction tran;
try
{
//System.Data.SqlClient.SqlTransaction transaction;
//tran = connection.BeginTransaction(IsolationLevel.ReadCom mitted);
//command.Transaction = tran;
SqlCommand Cmd_Single = newSqlCommand();
//Cmd_Single.Connection = con;
string Cmd_Singletext = "ALTER DATABASE " + dbName + " SET SINGLE_USER with ROLLBACK IMMEDIATE";
command.CommandText = Cmd_Singletext;
command.ExecuteNonQuery();

File.Copy(filename, tmpBackupFile, true);
connection.ChangeDatabase("master");
command.CommandText = "RESTORE DATABASE " + defaultDB + " FROM DISK=N'" + tmpBackupFile + "' WITH REPLACE";
command.ExecuteNonQuery();
connection.ChangeDatabase(defaultDB);
File.Delete(tmpBackupFile);

Cmd_Singletext = "ALTER DATABASE " + dbName + " SET MULTI_USER";
command.CommandText = Cmd_Singletext;
command.ExecuteNonQuery();
sign = true;
// tran.Commit();
}
catch (Exception ex)
{
Error = ex.Message;
sign = false;
// Attempt to roll back the transaction.
try
{
// tran.Rollback();
}
catch (Exception ex2)
{
Error += ex2.Message;
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
connection.Close();
return sign;
}
#endregion

csharpprogramer88
پنج شنبه 16 اردیبهشت 1389, 00:23 صبح
برادر از كد شما هيچي نفهميدم لطفا اگر امكان داره مثل كد من تغييرش بديد با تشكر

com_engineer_ab
پنج شنبه 16 اردیبهشت 1389, 09:30 صبح
مثل کد شما تغییرش بدم؟؟؟؟؟؟
چطور؟؟

hojjatshariffam
پنج شنبه 16 اردیبهشت 1389, 11:38 صبح
بک آپ گیری ایشون که همون کد شماست ، فرقی نمی کنه ، فقط با در نظر گرفتن این که به تعداد افراد برنامه نویس روش کد نویسی وجود داره

این دوستمون اول از رجیستری آدرس محل دایکتوری بک آپ اس کیو سرور رو گیر آورده ، اونجا بک آپ گرفته و بعد کپی کرده به جایی که می خواد

رستورشو هنوز بررسی نکردم ، فردا یه نگا میندازم ، الان کار دارم

موفق باشی

csharpprogramer88
جمعه 17 اردیبهشت 1389, 20:36 عصر
بک آپ گیری ایشون که همون کد شماست ، فرقی نمی کنه ، فقط با در نظر گرفتن این که به تعداد افراد برنامه نویس روش کد نویسی وجود داره

این دوستمون اول از رجیستری آدرس محل دایکتوری بک آپ اس کیو سرور رو گیر آورده ، اونجا بک آپ گرفته و بعد کپی کرده به جایی که می خواد

رستورشو هنوز بررسی نکردم ، فردا یه نگا میندازم ، الان کار دارم

موفق باشی

دوست عزيز اگر امكان داره كمك كنيد چون جستجو هم مي كنم نمي تونم مشكل خودم را حل كنم

amirghazali
شنبه 18 اردیبهشت 1389, 00:58 صبح
سلام به همه دوستان و اساتید محترم.
این کمپوننتی که من قرار داده ام حاصل تغییراتی است که در ماژول اصلی که از همین سایت گرفتم ، می باشد. برای بکاپ گرفتن و ریستور کردن دیتابیس ها بصورت Online و تحت شبکه با Sql Server 2008 جواب گرفتم .
تغییراتی که من به ماژول اولیه دادم این بودش که یه event بهش اضافه کردم که لحظه پایان فعالیت فایر می شود . همچنین با استفاده از ایجاد deletege ، روند پیش رفت کار را در یک فرم بصورت فراخوانی فرم با روال ShowDialog نمایش دادم که برای برنامه نویسهای حرفه ای قابل توجه می باشد . چون که نمی خواند در هنگام گرفتن بک آپ و یا ریستور کردن دیتابیس ، کاربر فعالیت دیگری انجام دهد.
یاد آور می شوم که تکنیک بکار رفته در این کمپوننت برای بکاپ گیری و .. استفاده از smo می باشد .
امیدوارم که به درد بخور باشه.
با تشکر

iman_me
شنبه 18 اردیبهشت 1389, 13:15 عصر
دوستان اگه دیتابیس بسته نشده باشه ریستور نمیکنه

amirghazali
شنبه 18 اردیبهشت 1389, 13:54 عصر
با سلام به شما دوست عزیز.
دوست من شما یه نگاهی به کامپوننت من بکنید. متوجه می شوید که حتی در حالت Online نیز Restore انجام می شه!
همچنین تحت شبکه هم جواب می ده . به نقل قول از نویسنده اصلی این کامپوننت که گفتند " بیاد داشته باشید که مسیر Backup و یا فایل Restore درون کامپیوتری هستش که Sql Server و دیتابیس روی اون نصبه"

csharpprogramer88
شنبه 18 اردیبهشت 1389, 22:17 عصر
با سلام به شما دوست عزیز.
دوست من شما یه نگاهی به کامپوننت من بکنید. متوجه می شوید که حتی در حالت Online نیز Restore انجام می شه!
همچنین تحت شبکه هم جواب می ده . به نقل قول از نویسنده اصلی این کامپوننت که گفتند " بیاد داشته باشید که مسیر Backup و یا فایل Restore درون کامپیوتری هستش که Sql Server و دیتابیس روی اون نصبه"

دوست من كامپوننت شما را دانلود كردم ولي متاسفانه اجرا نمي شه و خطا مي گيره دوست عزيز من زياد وقت ندارم خواهشا به كد من در صفحه قبل نگاهي بياندازيد به اين نكته مهم هم توجه كنيد كه من در حالتي كه ديتابيس را كنار فايل exe قرار نداده بودم و كانكشن استرينگ آن را نيز تغيير نداده بودم درست اجرا مي شد

navid1n2000
شنبه 18 اردیبهشت 1389, 23:01 عصر
شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی
من یک کد برات میذارم اگه کارایی که میگمو درست انجام بدی مطمنم درست کار می کنه :

con = newSqlConnection("Data Source=اسم سرور;Initial Catalog=Security;Integrated Security=True");
try
{
con.Open();
string s1 = "ALTER DATABASE اسم دیتابیست SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE اسم دیتابیستSET MULTI_USER";
string query = "RESTORE DATABASE اسم دیتابیست FROM DISK ='" + Masir + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = newSqlCommand();
cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.CommandText = s2;
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد ");
}
catch
{
MessageBox.Show("اشکال در ارتباط با دیتابیس ");
}

Masir : مسیر فایل پشتیبانت هست که می تونی از یک opendialogbox بگیریش
حله؟

csharpprogramer88
یک شنبه 19 اردیبهشت 1389, 09:11 صبح
شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی
من یک کد برات میذارم اگه کارایی که میگمو درست انجام بدی مطمنم درست کار می کنه :

con = newSqlConnection("Data Source=اسم سرور;Initial Catalog=Security;Integrated Security=True");
try
{
con.Open();
string s1 = "ALTER DATABASE اسم دیتابیست SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE اسم دیتابیستSET MULTI_USER";
string query = "RESTORE DATABASE اسم دیتابیست FROM DISK ='" + Masir + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = newSqlCommand();
cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.CommandText = s2;
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد ");
}
catch
{
MessageBox.Show("اشکال در ارتباط با دیتابیس ");
}

Masir : مسیر فایل پشتیبانت هست که می تونی از یک opendialogbox بگیریش
حله؟

برادر من شما پست اول و بقيه پست هاي منو خونديد يا نه . ايني كه برام فرستاديد زماني كه من ديتابيس را در مسير فايل exe قرار ندادم و طبيعي است كه قبل از اينكه كانكشن استرينگ را تغيير بدم درست كار مي كنه ولي من در پست هاي قبل هم گفتم كه ديتابيس را در مسير فايل exe قرار دادم و كد اروري كه در پست يك فرستادم را مي ده
دوست عزيز در مورد اي بيشتر توضيح بده :
شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی

navid1n2000
یک شنبه 19 اردیبهشت 1389, 13:32 عصر
دوست عزيز در مورد اي بيشتر توضيح بده :
شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی
با یه مثال مشخصش می کنیم .
ببین این کانکشن استرینگ من برای کارهای معمولیه مثل درج در دیتابیس یا حذف :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=VamDB;Integrated Security=True"

یعنی دیتابیسی که من باهاش کار می کنم VamDB
ولی وقتی میخوام این دیتابیسمو بازیابی کنم (restor) نباید از طریق همین کانکشن استرینگ وصل بشم بلکه :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=Security;Integrated Security=True"

دیدی؟چون نمیشه وصل بشی به یک دیتابیس و بخوای همونم رستور کنی
حلهههههههههه؟

csharpprogramer88
یک شنبه 19 اردیبهشت 1389, 20:25 عصر
با یه مثال مشخصش می کنیم .
ببین این کانکشن استرینگ من برای کارهای معمولیه مثل درج در دیتابیس یا حذف :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=VamDB;Integrated Security=True";

یعنی دیتابیسی که من باهاش کار می کنم VamDB
ولی وقتی میخوام این دیتابیسمو بازیابی کنم (restor) نباید از طریق همین کانکشن استرینگ وصل بشم بلکه :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=Security;Integrated Security=True";

دیدی؟چون نمیشه وصل بشی به یک دیتابیس و بخوای همونم رستور کنی
حلهههههههههه؟

دوست من بازم همون ارور را مي ده

navid1n2000
یک شنبه 19 اردیبهشت 1389, 22:19 عصر
چه اروری؟؟؟؟؟؟؟؟؟/
شاید توی sql server تو دیتابیس Security وجود نداشته باشه
عوضش کن
ارور رو بگو که چیه

csharpprogramer88
یک شنبه 19 اردیبهشت 1389, 22:44 عصر
چه اروری؟؟؟؟؟؟؟؟؟/
شاید توی sql server تو دیتابیس Security وجود نداشته باشه
عوضش کن
ارور رو بگو که چیه

دوست من با اين پستي كه فرستاديد معلوم اصلا پست صفحه قبل منو نخونديد خواهشا يك نگاه به پست هاي صفحه قبل بياندازيد

amirghazali
سه شنبه 21 اردیبهشت 1389, 13:41 عصر
با سلام. از تاخیری که داشتم شرمنده .
کد من را بصورت زیر استفاده کنید .(برای Restore کردن و backup مثل هم هستش)

database = "نام دیتابیس خود";
file_name = "مسیر فایل بک آپ گرفته شده";
if (Sql_Management.ConnectToServer("اینجا باید کانکشن استرینگ را برگردونید"))
{
Sql_Management.RestoreDataBase(database, file_name);
Sql_Management.Dicconnect();
}

amirghazali
سه شنبه 21 اردیبهشت 1389, 13:55 عصر
با سلام مجدد .
این SQL_Management نام شی ساخته شده هستش که باید از قسمت Toolbox اون را به فرم اضافه کنید .:اشتباه:

amirghazali
سه شنبه 21 اردیبهشت 1389, 14:01 عصر
سلام . شرمنده . یک چیز دیگه یادم اومد .
اگه کد خطای زمان کمپایل میده ، توی لیست رفرنس ها ، فایلهای dll مربوط به SqlServr را از نو load کنید .

neda_dela
سه شنبه 28 اردیبهشت 1389, 12:55 عصر
با سلام
من تا حالا برای بک آپ گرفتن از اطلاعاتم می رفتم به مسیر sql و دو تا فایل mdf و ldf رو کپی می کردم تو یه درایو دیگه
حالا برای اینکه کاربر مجبور نباشه این مسیر رو طی کنه و بتونه از طریق همین برنامه به بک آپ گیری از اطلاعات دسترسی داشته باشه باید چکار کنم ؟ چه دستوری می تونه منو کمک کنه؟
ممنون:لبخندساده:

طبیب دل
سه شنبه 28 اردیبهشت 1389, 13:39 عصر
با سلام
من تا حالا برای بک آپ گرفتن از اطلاعاتم می رفتم به مسیر sql و دو تا فایل mdf و ldf رو کپی می کردم تو یه درایو دیگه
حالا برای اینکه کاربر مجبور نباشه این مسیر رو طی کنه و بتونه از طریق همین برنامه به بک آپ گیری از اطلاعات دسترسی داشته باشه باید چکار کنم ؟ چه دستوری می تونه منو کمک کنه؟
ممنون:لبخندساده:
من با این دستور sql بکاپ میکیرم


backup database your databse name to disk="مسیر بکاپ"

sia_2007
سه شنبه 28 اردیبهشت 1389, 13:58 عصر
وقتی فایل ها رو کپی میکردی سرویس SQL Service در حال اجرا بود ؟
و دیتابیس Attach شده بود ؟
در این صورت باید بگویم کپی و پیست گرفتن در اغلب موارد غیر ممکنه و خطالی File in Use میده.
و در مواردی هم که کپی میشه؛ فایل کپی شده کار نمیکنه.
اگه این طوری بود که شما میگفتی ؛ هر کسی میومد پشت سرور و بدون این که نیاز به Login خاصی داشته باشه ؛ کل دیتابیس ها رو میبرد.
البته من این رو تست نکردم؛ و شکر خدا دیتابیس رو با TDE رمزنگاری میکنم.
شما یه تست کن ببین این به اصطلاح بک آپ ها کار هم میکنند.
ممنون میشم.

neda_dela
جمعه 31 اردیبهشت 1389, 13:00 عصر
سلام
http://barnamenevis.biz/forum/showpost.php?p=771636&postcount=317
سلام دوست من
نمونه کدتون رو دیدم خیلی به دردم خورد ممنون
بک آپش کار می کنه و درسته. من برای مسیری که باید مشخص کنم درایو g و توی یه پوشه از قبل ساخته شده ، تعیین کردم
ولی ری استور درست کار نمی کنه خطای اشکال در ارتباط رو میده
البته مسیر ری استور رو هم همون درایو g و همون پوشه تعیین کردم
این کارم درسته ؟
اصلا این بازیابی کی به درد می خوره؟
من اومدم برای امتحان بانک اصلی که توی مسیر sql هست رو پاک کردم تا بیام و با استفاده از دکمه بازیابی که توی برنامه گذاشتم بانکم رو از درایو g بازیابی کنم اما اصلا برنامه اجرا نمیشه که طبیعی هم هست
حالا میخام بدونم اگه یه زمونی به هر دلیلی بانک اصلی پرید و برنامه اجرا نشد این گزینه بازیابی که اصلا به در نمی خوره

M.YasPro
جمعه 31 اردیبهشت 1389, 17:36 عصر
سلام
بک اپش هم کار می کنه مشکلی نداره .
بازیابی صرفا برای بازگشت دیتابیس حذف شده به درد نمی خوره . برای بازیافت بخشی از اطلاعات خیلی به درد میخوره (زمانی که کاربر به اشتباه مثلا یه مشتری رو از یه سیستم فروش حذف می کنه و شاید برنامه شما هم ازش بپرسه که آیا میخواهید تمام خرید های این مشتری رو هم پاک کنید و اون هم بله رو انتخاب می کنه . پس بک اپ به درد می خوره )
برای بازیابی کل دیتابیس هم شما میتونید یه برنامه کوچیک ، جدا از برنامه اصلی داشته باشید که دیتابیس بسازه یا ریستور کنه . که در زمان نبودن دیتابیس هم بالا بیاد .
من توی برنامه هام مسیر بک اپ رو در اختیار کاربر میزارم تا هر جا خواست ذخیره کنه .

موفق باشید .

neda_dela
شنبه 01 خرداد 1389, 06:51 صبح
سلام
بک اپش هم کار می کنه مشکلی نداره .
بازیابی صرفا برای بازگشت دیتابیس حذف شده به درد نمی خوره . برای بازیافت بخشی از اطلاعات خیلی به درد میخوره (زمانی که کاربر به اشتباه مثلا یه مشتری رو از یه سیستم فروش حذف می کنه و شاید برنامه شما هم ازش بپرسه که آیا میخواهید تمام خرید های این مشتری رو هم پاک کنید و اون هم بله رو انتخاب می کنه . پس بک اپ به درد می خوره )
برای بازیابی کل دیتابیس هم شما میتونید یه برنامه کوچیک ، جدا از برنامه اصلی داشته باشید که دیتابیس بسازه یا ریستور کنه . که در زمان نبودن دیتابیس هم بالا بیاد .
من توی برنامه هام مسیر بک اپ رو در اختیار کاربر میزارم تا هر جا خواست ذخیره کنه .

موفق باشید .
مرسی دوست من
آره بک آپش برای منم کار می کنه . اما ری استور کار نمی کنه و خطای اشکال در ارتباط میده
آره خیلی خوبه که کاربر خودش مسیر رو انتخاب کنه . می تونی بیشتر کمک کنی
ممنون میشم

M.YasPro
شنبه 01 خرداد 1389, 07:25 صبح
من منظورم ری استور بود معذرت می خوام.


آره خیلی خوبه که کاربر خودش مسیر رو انتخاب کنه . می تونی بیشتر کمک کنی


این کد رو نگاه کن . مسیر رو از کاربر می گیره


string strFileName = string.Empty;
openFileDialog1.Filter = @"sql backup file (*.bak) | *.bak|all files (*.*) |*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "استفاده از فایل پشتیبان";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if (MessageBox.Show("آیا میخواهید سیستم را بازیابی کنید؟", "حراست همگام", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Application.DoEvents();
strFileName = openFileDialog1.FileName;
restore(strFileName);
}
}


متن ارور رو هم بزارید بهتر میشه اظهار نظر کرد .

neda_dela
شنبه 01 خرداد 1389, 12:38 عصر
متن ارور رو هم بزارید بهتر میشه اظهار نظر کرد .
همون پیغامی که توی کش گذاشته شده بود رو برای ارور نشون میده
"اشکال در ارتباط با بانک اطلاعاتی"
خیلی متشکرم از پیگیری شما:لبخندساده:

M.YasPro
شنبه 01 خرداد 1389, 12:47 عصر
try catch رو بردارید و متن ارور رو بزارید .

ali.ghodrati
شنبه 01 خرداد 1389, 13:37 عصر
سلام دوست عزیز.منم مشکل شما رو داشتم با استفاده از کد خودت ایرادهایی رو که داشت گرفتم و در اخر هم برام جواب داد.اینم کدش. موفق باشی
backup

string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\ensani.mdf] TO DISK = N'" + strFileName + "' WITH NOFORMAT, NOINIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;

string scnn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
oConnection = new SqlConnection(scnn);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
oConnection.Close();



Restore

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
con.Open();
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\ensani.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\ensani.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\ensani.mdf] FROM DISK ='" + strFileName + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();

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

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

con.Close();

neda_dela
یک شنبه 02 خرداد 1389, 07:25 صبح
try catch رو بردارید و متن ارور رو بزارید .
اینم متن ارور:

Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
کد دکمه پشتیبانی:

SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
SqlCommand com = new SqlCommand();
try
{
con.Open();
string query = "BACKUP DATABASE quran TO DISK = 'g:\\bk\\Backup.MDF'";
com.CommandText = query;
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("پ¬¢ی ںë گی©ی ى §©«¢ی ںë¤ںê ¬§");
}
catch
{
MessageBox.Show("ں¬کںé §© ں©¢ ںل ں ںëک ںلéںمں¢ی");
}

کد دکمه بازیابی:

SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
SqlCommand com = new SqlCommand();
con.Open();
string query = "USE master RESTORE DATABASE [quran] FROM DISK = 'g:\\bk\\Backup.MDF'";
com.CommandText = query;
com.Connection = con;
com.ExecuteNonQuery();
con.Close();

البته هنوز وقت نکردم اون مطلب مربوط به تعیین مسیر توسط کاربر رو بخونم حتما درستش می کنم

M.YasPro
یک شنبه 02 خرداد 1389, 09:47 صبح
این رو امتحان کنید :


Alter Database YOURDB
SET SINGLE_USER With ROLLBACK IMMEDIATE


RESTORE DATABASE YOURDB
FROM DISK = 'address'

neda_dela
یک شنبه 02 خرداد 1389, 23:10 عصر
این رو امتحان کنید :


Alter Database YOURDB
SET SINGLE_USER With ROLLBACK IMMEDIATE


RESTORE DATABASE YOURDB
FROM DISK = 'address'

متشکرم دوست خوبم
راستی اشکالش رو فهمیدم
پشتیبان گیری که مشکلی نداره اما برای بازیابی من دکممه بازیابی رو توی فرمی گذاشتم که تعدادی از کنترل هاش با بانک در ارتباطه . به این نتیجه رسیدم که باید دکمه های پشتیبان گیری و بازیابی بانک در فرمی باشه که با بانکم ارتباط نداشته باشه چون این کار رو که کردم جواب داد:قلب::لبخندساده:

baharvand87
دوشنبه 10 خرداد 1389, 22:35 عصر
سلام به همه دوستان
باور کنید کلی سرچ کردم کلی مطلبم پیدا کردم ولی هیچکدومشون مشکلم حل نکردن با این کد میخام بکاپ بگیرم ولی...

con = new SqlConnection();
con.ConnectionString = "Data Source=.\\SqlExpress; AttachDbFileName=" +
Application.StartupPath + \\otagdb.mdf;Integrated Security=True;
con.Open();
string query = "BACKUP DATABASE[ " + Application.StartupPath + "\\otagdb.mdf] TO DISK = 'D:\\aaa\\ot.MDF'";

SqlCommand cmd = new SqlCommand();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();

این خطا رو میده یا میگه خطا نزذیک 'D' یا اینجور چیزی ممنون میشم کمک کنید البته بیشتر با سورسی که تو برنامه دیتا بیسم باشه. بدون دیتا بیس پیدا کردم ولی مشکلم حل نشد مرسی از کمکتون:خجالت:


Could not locate entry in sysdatabases for database ' D:\myprogram\Visual Studio 2008\otagbazargani\New folder\otag\otag\bin\Debug\otagdb.mdf'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.

r00tkit
دوشنبه 10 خرداد 1389, 23:38 عصر
سلام
توی کد زیر فقط اسم database نیاز هستش مسیر رو پاک کن یعنی Application.StartupPath

string query = "BACKUP DATABASE[ " + Application.StartupPath + "\\otagdb.mdf] TO DISK = 'D:\\aaa\\ot.MDF'";


مثال:

BACKUP DATABASE mydatabase TO DISK = 'C:\Temp\TSQLFundamentals2008_Full.BAK' WITH INIT;

baharvand87
سه شنبه 11 خرداد 1389, 16:56 عصر
سلام هرکاری میکنم نمیشه راستی من سیستم عاملم 7 هست و درایوام ntfs با اینا مشکل نداره..

string query = "BACKUP DATABASE \\otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";
string query = "BACKUP DATABASE otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";

به ترتیب این خطاها رو میده لطفا کمکم کنید:لبخندساده:


Incorrect syntax near '\'.
Incorrect syntax near '.'.

behnam25214
سه شنبه 11 خرداد 1389, 19:45 عصر
دوست عزیز این یک نمونه هست که درست هم کار میکنه.

BACKUP DATABASE [Book Lib] TO DISK = 'C:\\up.bak'
پسوند هم لازم نیست برای Book Lib نام پایگاه داده ات بزاری

r00tkit
سه شنبه 11 خرداد 1389, 20:04 عصر
سلام هرکاری میکنم نمیشه راستی من سیستم عاملم 7 هست و درایوام ntfs با اینا مشکل نداره..


string query = "BACKUP DATABASE \\otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";
string query = "BACKUP DATABASE otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";

به ترتیب این خطاها رو میده لطفا کمکم کنید:لبخندساده:


Incorrect syntax near '\'.
Incorrect syntax near '.'.



ان چیزی که گفتم بنویس

baharvand87
سه شنبه 11 خرداد 1389, 20:05 عصر
واقعا مرسی ما که کارمون را افتاد اینم شاید یکی دیگه خاست

string query = "BACKUP DATABASE otagdb TO DISK = 'D:\\aaa\\ot.MDF'";

دختر باران
دوشنبه 07 تیر 1389, 17:34 عصر
سلام
دوست عزیز چرا من نمی تونم از این متد استفاده کنم؟!


Application.startup


Application رو که از منو انتخاب می کنم ،بعد از زدن نقطه startup رو نمایش نمی ده که انتخاب کنم!!

آیا فضای نام خاصی رو باید تعریف کنم؟
لطفآ راهنماییم می کنین؟ ممنونم

دختر باران
سه شنبه 08 تیر 1389, 11:04 صبح
کسی از دوستان می تونه جواب این سئوال رو بگه که چرا بعد از دستور Application،متد startup برای من نمایش داده نمی شه؟!

کمک بزرگی بهم می کنین اگه این مشکل رو حل کنین:لبخندساده:

gerdioz
سه شنبه 08 تیر 1389, 15:32 عصر
سلام
از یک برنامه نویس این اشتباهات بعیده
شما با یک دیتابیس مثلا 1 وارد شدید و از همون بک آپ گرفتید
اما شما با یک دیتابیس که وجود داره و با همون وارد شده اید چطور میشه بک آپ گرفت
اول باید اون دیتابیس وجود نداشته باشه
دوم شما هنگام بک آپ گیری سعی کنید با دیتابیسی مثل master وارد شوید

حجتی نیا
سه شنبه 08 تیر 1389, 16:47 عصر
جناب csharpprogramer88 :
اول باید بگم منم داره از همین کد استفاده میکنم و داره جواب میده .. بر طبق عکس که گذاشتم کدتون در ناحیه 1و2 ایراد داره :
1) از این کد بجاش استفاده کنین

[" + Application.StartupPath + "\\database-name.mdf]2) شما باید از فایل با پسوند bak. عمل رستور رو انجام بدین نه از mdf. در اینجا باید آدرس فایل بکاپ رو بهش بدین که میتونین از یه openFileDialog استفاده کنین مثه این :

FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE"درضمن در کد بکاپ هم مشکل وجود داره و اینه که باید فایل بکاپ با پسوند bak. بنویسین و نه mdf. مثه این :

@"BACKUP DATABASE [" + Application.StartupPath + "\\database-name.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"' WITH FORMAT, INIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"; من واسه آدرس ذخیره فایل از یه saveFileDialog استفاده کردم.
این تغییرات واسه زمانیه که فایل دیتابیس (mdf.)در پوشه برنامه bin>debug در قرار داره

hojjatshariffam
سه شنبه 08 تیر 1389, 20:14 عصر
آخرش یکی نشد این مشکل ما رو حل کنه
این کد واسه بک آپ گیری جواب میده :



BACKUP DATABASE [SampleDataBase]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\BackUp\FullBackUp .bak'
WITH NOFORMAT, NOINIT, NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

ولی این کد ارور میده:



BACKUP DATABASE [SampleDataBase]
TO DISK = N'D:\FullBackUp.bak'
WITH NOFORMAT, NOINIT, NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

اینم ارورشه:



Cannot open backup device 'D:\FullBackUp.bak'.
Operating system error 5(failed to retrieve text for this error. Reason: 1815).
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.


واقعا دیگه کلافم کرده

حجتی نیا
سه شنبه 08 تیر 1389, 23:46 عصر
آخرش یکی نشد این مشکل ما رو حل کنه
در دستور بکاپ اینارو وارد(بولد شده) کنید :


WITH FORMAT, INIT, NAME = N'accounting-Full Database Backup'

اشالله درست میشه..

hojjatshariffam
چهارشنبه 09 تیر 1389, 12:36 عصر
در دستور بکاپ اینارو وارد(بولد شده) کنید :


WITH FORMAT, INIT, NAME = N'accounting-Full Database Backup'

اشالله درست میشه..
ممنون دوست من
ولی بازم درست نشد
اشکال از این چیزا نیست ، اصلا سیستم عامل اجازه دسترسی به اون آدرس رو از طریق اس کیو ال سرور نمی ده ، فقط مسیر بک آپ خود اسکیو ال سرور خطا نمی ده

Babak-Magic
دوشنبه 21 تیر 1389, 15:09 عصر
سلام من این کد را برای backup گیری نوشتم ولی عمل نمیکنه مشکلش کجاست؟

SaveFileDialog sv = new SaveFileDialog();
if (sv.ShowDialog() == DialogResult.OK)
{
string location = string.Empty;
location = sv.FileName;
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\mydbajance.mdf;Integrated Security=True;User Instance=True";
con.Open();
SqlCommand cmd = new SqlCommand();
string gr = "backup database database1 to disk='" + location + "'";
cmd.Connection = con;
cmd.CommandText = gr;
cmd.ExecuteNonQuery();
con.Close();}

mehrsa_fr
دوشنبه 21 تیر 1389, 16:07 عصر
SqlCommand cmd = new SqlCommand("backup database [" + DataBase Name + "] to disk=@path with format", con);
cmd.Parameters.AddWithValue("@path", saveFileDialog1.FileName);

اینا رو بجای string gr جایگزاری کن ببین درست میشه

Babak-Magic
دوشنبه 21 تیر 1389, 21:58 عصر
Could not locate entry in sysdatabases for database 'mydbajance'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.
اینم ارورش انگار دیتابیس رو پیدا نمیکنه

neda_dela
دوشنبه 21 تیر 1389, 23:37 عصر
سلام
من این کد رو گذاشتم و جواب هم گرفتم:

if (MessageBox.Show("آیا می خواهید از بانک اطلاعاتی پشتیبان گیری نمایید؟", "حراست همگام", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
string strFileName = string.Empty;
saveFileDialog1.Filter = @"sql backup file (*.bak) | *.bak|all files (*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.Title = "ذخیره ساری فایل پشتیبان";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
Application.DoEvents();
strFileName = saveFileDialog1.FileName;
SqlConnection con = newSqlConnection();
con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
SqlCommand com = newSqlCommand();
try
{
con.Open();
string query = "BACKUP DATABASE quran TO DISK = '" + strFileName + "'";
com.CommandText = query;
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("پشتیبان گیری به درستی انجام شد");
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}
}
}

ahrimaneahurai
دوشنبه 21 تیر 1389, 23:55 عصر
این برنامه رو دانلود کن
http://www.4shared.com/file/xudslTvo/SQL_Backup.html

Babak-Magic
پنج شنبه 24 تیر 1389, 11:16 صبح
Could not locate entry in sysdatabases for database 'mydbajance'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally
دوستان من هر كار ميكنم باز اين ارورو ميده

حجتی نیا
پنج شنبه 24 تیر 1389, 11:46 صبح
if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
{
string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\sodour.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"' WITH FORMAT, INIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
if (objconnection.State != ConnectionState.Open)
objconnection.Open();
oCommand = new SqlCommand(command, objconnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
objconnection.Close();
FarsiMessageBox.FMessageBox.Show("فابل پشتیبان ذخیره شد", "", FarsiMessageBox.FMessageBoxIcons.Information, 2000);
oCommand.Dispose();
}
این کد رو داره استفاده میکنم،یه تستی بکن (دیتابیس من تو پوشه برنامم هست بخاطر همین از Application.StartupPath استفاده کردم)
البته کد شما اشکالی نداره فقط یه سوال : نام دیتابیس شما mydbajance اینه ولی در دستور بکاپ از نام database1 استفاده کردین،چجوریاست؟؟:متفکر:

csharpprogramer88
پنج شنبه 24 تیر 1389, 12:29 عصر
توي پروفايلم بگرديد يه چيزهايي پيداميشه

Babak-Magic
پنج شنبه 24 تیر 1389, 13:07 عصر
ممنون حالا كاراي شما هم تست مي كنم اون Database1 هم واسه اينه كه يه ديبي ديگه هم ادد كردم كه تست كنم يادم رفته بود درست كنم اخه خيلي عجيبه در ظاهر همه چيز درسته ولي كار نميكنه

zayens
شنبه 09 مرداد 1389, 17:03 عصر
من کلی جستجو کردم و کدهای زیر دستگیرم شد پس لطفا از نمونه کدهای مسخره ی زیر استفاده نکنین چون هیچ کدوم به دردم نخورد.
در واقع همه ی اینها(به غیر از آخری) برای بکاپ گیری از دیتابیسی است که به sql Server اتچ شده نه به پروژه ی خودمون


query = "BACKUP DATABASE dbName TO DISK = N'E:\\aa.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";



یا


query = "BACKUP DATABASE 'C:\\dbName.MDF' TO DISK = N'E:\\dd.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";


یا


"BACKUP DATABASE X TO DISK ='" + save_back_up + "'";


یا


"BACKUP DATABASE [C:\\dbName.MDF] TO DISK = N'E:\\backup_db.BAK'";



تا این که کد مورد نظر را پیدا کردم که برای بکاپ گیری از دیتابیس Attach شده به برنامه استفاده میشه

cmd.CommandText = @"ALTER DATABASE [C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug\DBREST ORANS.MDF] SET read_write";

کد بالا 100% کار میکنه. اما حالا سوال اینجاست که وقتی برنامه را در سیستم مقصد نصب میکنم آدرس ها (.......C:\Users\zayens\Documents) عوض میشه و قطعا کار نمیکنه
به جای آدرس بالا کسی روشی سراغ داره؟
ممنون

حجتی نیا
شنبه 09 مرداد 1389, 17:22 عصر
پس لطفا از نمونه کدهای مسخره ی زیر استفاده نکنین چون هیچ کدوم به دردم نخورد.

تو برنامه شما کارنکرده دلیل بر مسخره بودن اونا نمیشه...
این کد رو داره استفاده میکنم،با اکسپرس هم کار میکنه، دیتابیس هم به برنامه اتچ شده و در bin>debug برنامه قرار داره : (درواقع اصلاح شده کد دومی که گذاشتید با فرمت بکاپ قبلی)

if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
{
string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\sodour.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"' WITH FORMAT, INIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
if (objconnection.State != ConnectionState.Open)
objconnection.Open();
oCommand = new SqlCommand(command, objconnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
objconnection.Close();
FarsiMessageBox.FMessageBox.Show("فابل پشتیبان ذخیره شد", "", FarsiMessageBox.FMessageBoxIcons.Information, 2000);
oCommand.Dispose();
}
اینم رستورش که کار هم میکنه :

objconnection.Open();
if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
{
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\sodour.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

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

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

cmd.Dispose();
Application.Restart();
}
else
FarsiMessageBox.FMessageBox.Show("فایل با پسوند .bak انتخاب کنید", "خطا", FarsiMessageBox.FMessageBoxButtons.OK, FarsiMessageBox.FMessageBoxIcons.Error, FarsiMessageBox.FMessageBoxDefaultButtons.Button3) ;
هردو رو در سیستمی که برنامه توش نصبه تست کردم و کار میکنه...

zayens
دوشنبه 11 مرداد 1389, 14:42 عصر
اولین کدتون را امتحان کردم
البته کد زیر را هم بهش اضافه کردم

objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");

بعد از دادن آدرس مورد نظر و نام دلخواه یه فایل بکاپ ایجاد میشه
اما یه مشکلاتی داره
1- هیچ پسوندی نداره(که البته نمیدونم باید داشته باشه یا نه)
2- بعد از ایجاد بکاپ برنامه ارور میده
ارور زیر را داد

Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'.
Could not insert a backup or restore history/detai
l record in the msdb database. This may
indicate a problem with the msdb database.
The backup/restore operation was still successful.
Processed 272 pages for database
'C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug
\DBRESTORANS.mdf', file 'RESTAURANT' on file 1.
Processed 1 pages for database
'C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug\
DBRESTORANS.mdf', file 'RESTAURANT_log' on file 1.
BACKUP DATABASE successfully processed
273 pages in 0.236 seconds (9.037 MB/sec).

حجتی نیا
دوشنبه 11 مرداد 1389, 15:11 عصر
1- هیچ پسوندی نداره(که البته نمیدونم باید داشته باشه یا نه)
باید داشته باشه،پسوندش توسط savefileDialog انتخاب میشه(عکس)
خطای دوم احتمالا واسه همینه،تست کنین..

zayens
دوشنبه 11 مرداد 1389, 16:16 عصر
باید داشته باشه،پسوندش توسط savefileDialog انتخاب میشه(عکس)
خطای دوم احتمالا واسه همینه،تست کنین..
پسوند درست شد ولی خطا همچنان باقی است
این کد منه ببینید آیا مشکلی توش هست؟

private void btnSaveBakup_Click(object sender, EventArgs e)
{
objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
{
string command = "BACKUP DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] TO DISK = N'" + saveFileDialog_backup.FileName + "' WITH FORMAT, INIT";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
if (objconnection.State == ConnectionState.Closed)
objconnection.Open();
oCommand = new SqlCommand(command, objconnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
objconnection.Close();
oCommand.Dispose();
}
}

zayens
دوشنبه 11 مرداد 1389, 16:48 عصر
این هم کد دکمه ی restore

private void btnRestore_Click_1(object sender, EventArgs e)
{
objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
objconnection.Open();
if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
{
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();
cmd.CommandText = s2;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();
cmd.CommandText = query;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();
cmd.Dispose();
Application.Restart();
}
else
MessageBox.Show(" \n ");

}

این کد هم در قسمت ;()cmd.ExecuteNonQuery اروری مثل ارور قبل را میده:

ERROR

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.
Processed 272 pages for database
'C:\Users\zayens\Documents\Visual Studio 2008
\Projects\RESTORANS\RESTORANS\bin\Debug\
DBRESTORANS.mdf', file 'RESTAURANT' on file 1.
Processed 1 pages for database
'C:\Users\zayens\Documents\Visual Studio 2008
\Projects\RESTORANS\RESTORANS\bin\Debug
\DBRESTORANS.mdf', file 'RESTAURANT_log' on file 1.
RESTORE DATABASE successfully processed
273 pages in 0.248 seconds (8.600 MB/sec)

حجتی نیا
دوشنبه 11 مرداد 1389, 16:50 عصر
این کد منه ببینید آیا مشکلی توش هست؟
درقسمت بکاپ، دستور اونو کامل بنویس همونجوری من نوشتم...

zayens
دوشنبه 11 مرداد 1389, 17:15 عصر
دستور را عین مال شما کردم
بازم ارور فرقی نکرد
کلمات زیر را در گوگل سرچ کردم

Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'
تو بعضی سایتهای خارجی گفته بودن بدلیل ورژن دیتابیس هست.
من از sqlExpress2008 استفاده میکنم.
چون دیتابیسم روی SQL2008 ساخته شده بود و VS هم اکسپرس2005 را ساپورت میکنه
منم اجبارا اکسپرس 2008 را جداگانه نصب کردم که VS بتونه دیتابیسم را به پروژم اتچ کنه
کسی میتونه بگه الآن باید چیکار کنم؟:گریه:

caspiansea
شنبه 13 شهریور 1389, 13:12 عصر
با سلام
میخواستم بدونم که طوری میشه از اطلاعات بانکم توی برنامه یه backup بگیریم و بتونم همون backup رو توی برنامه بازیابی کنم.
با تشکر

ایمان مدائنی
شنبه 13 شهریور 1389, 13:50 عصر
بايد از دستور بكاپ و ري استور استفاده كني !

يك نمونه برنامه هست برات ميذارم كارتو راه ميندازه !

caspiansea
سه شنبه 16 شهریور 1389, 09:07 صبح
دستت دردنکنه مهندس
--------------------

دستت دردنکنه مهندس
راستی اگه اطلاعاتو برگردونم اطلاعات قبلی که توی بانکه چی می شه؟؟؟؟؟؟؟؟؟؟از بین که نمیره؟؟؟؟؟؟؟؟؟؟

javad_r_85
سه شنبه 16 شهریور 1389, 09:36 صبح
وقتی شما اطلاعاتت را ریستور میکنی جای اطلاعات قبلی می شینه .پس اگر واست مهمه زود به زود بکاپ بگیر

aryan2005
پنج شنبه 08 مهر 1389, 14:01 عصر
سلام
هنگامی که از دستور Bakup استفاده می کنم در اجرا خطائی مبنی بر نبود نام بانک ظاهر می شود ضمن اینکه بانک من از نوع َAttached درSQLExpress است

mmd2009
پنج شنبه 08 مهر 1389, 15:14 عصر
با سلام

کدی که مینویسید رو بذارید تا ببینیم اشکال از کجاست.

موفق باشید

صباح فتحی
پنج شنبه 08 مهر 1389, 15:19 عصر
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True");
SqlCommand com=new SqlCommand();
com.Connection = con;
con.Open();
com.CommandText="Use master backup database [phonebank] to disk=N'd:\\o'";
com.ExecuteNonQuery();
con.Close();
}

صباح فتحی
پنج شنبه 08 مهر 1389, 15:29 عصر
این کد بالارو همین الان تست کردم هیچ عیبی هم نداشت

hsn_sstp
پنج شنبه 05 اسفند 1389, 11:23 صبح
سلام
یک برنامه دارم که بانک اطلاعاتیش sql 2005 هستش و از داخل محیط visual stadio قسمت server explorer مدیریتش میکنم. یعنی sql server 2005 بصورت جدا نصب نکردم.
می خوام از دیتابیسم backup بگیرم و اونو ریستور کنم خیلی از کد هایی که تواین سایت بود را امتحان کردم ولی جواب نداد.
بکاپ میگیره ولی وقتی ریستور میکنم تغییرات به حالت قبل برنمی گرده.
باید چکار کنم؟

gerdioz
پنج شنبه 05 اسفند 1389, 19:04 عصر
backup
"BACKUP DATABASE Clup TO DISK='" + path + "' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"
restore
@"use master" + (char)13 + @"restore database [clup] from disk =N'" + path + "' with file=1,replace,stats=10"
path همون مسیر

Glx.Mzf
پنج شنبه 05 اسفند 1389, 22:36 عصر
این کد تو رنامه خودم بدون هیچ مشکلی اجرا میشه :

private void ToolStripMenuItemCreatBackUp_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.DereferenceLinks = true;
saveFileDialog.FileName = "Backup";
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = "C:\\";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "BACKUP DATABASE MontazeriAbbasAbad TO DISK = @Destination WITH FORMAT";
sqlCommand.Parameters.Add("@Destination", SqlDbType.VarChar);
temp = saveFileDialog.FileName;
sqlCommand.Parameters["@Destination"].Value = saveFileDialog.FileName;
if (temp.StartsWith("C:\\"))
{
MessageBox.Show(" . ", telBookName);
saveFileDialog.ShowDialog();
}
else
{
sqlConnection.Open();
this.Cursor = Cursors.WaitCursor;
sqlCommand.ExecuteNonQuery();
MessageBox.Show(" ", telBookName);
}
}
}
catch (Exception)
{
MessageBox.Show(" ", telBookName);
}
}



Restore :

private void ToolStripMenuItemLoadBackUpFile_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();
if ((openFileDialog1.FileName != "") && (openFileDialog1.FileName != "openFileDialog1"))
{
try
{
string filename = openFileDialog1.FileName;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "ALTER DATABASE MontazeriAbbasAbad SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;"
+ " RESTORE DATABASE MontazeriAbbasAbad FROM DISK =N'" + filename + "' WITH REPLACE ";
sqlCommand.Connection = sqlConnection;
sqlConnection.Open();
this.Cursor = Cursors.WaitCursor;
sqlCommand.ExecuteNonQuery();
sqlCommand.CommandText = " ALTER DATABASE MontazeriAbbasAbad SET MULTI_USER ";
sqlCommand.ExecuteNonQuery();
MessageBox.Show(" ", telBookName);
}
catch
{
MessageBox.Show(" ", telBookName);
}
}
}

hsn_sstp
دوشنبه 09 اسفند 1389, 13:12 عصر
دستتون درد نکنه ولی بازم جواب نگرفتم
:متفکر: یک نکته دیگه اینکه حجم فایل دیتابیسم حدود 2.5MB هستش ولی حجم فایل بکاپ حدود 805KB این ممکنه غیرعادی باشه؟
لطفا کمک کنید پروژم همش توموم شده ولی لین قسمتش گیر کردم:گریه:

hsn_sstp
یک شنبه 22 اسفند 1389, 10:08 صبح
دستتون درد نکنه خودم تونستم جوابشو پیدا کنم. اینجا میزارم تا بقیه دوستان بتونن استفاده کنن


Backup:
private void btnbackup_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + information.datebackup;
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|\\DBNAME.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);
}
}
}






-------------------------------------------------------------------------
Restor:


private void btnrestor_Click(object sender, EventArgs e)
{
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|\\DBNAME.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);
}
}
}

HAMRAHSOFT.IR
سه شنبه 21 تیر 1390, 13:24 عصر
بايد از دستور بكاپ و ري استور استفاده كني !

يك نمونه برنامه هست برات ميذارم كارتو راه ميندازه !

براي اسكيول 2008 جواب نميده

zahra_no
چهارشنبه 29 تیر 1390, 14:38 عصر
دوستان من از تمام روشهای که تو این سایت در مورد backup گیری گفته شده استفاده کردم
ولی تمام روشها به این خطا میرسه

فک میکنین مشکل از چی میتونه باشه؟

Cannot open backup device 'C:\b.bak'. Operating system error 5(Access is denied.).
BACKUP DATABASE is terminating abnormally.

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 14:50 عصر
کدتون رو بزارید بررسی میکنم

zahra_no
چهارشنبه 29 تیر 1390, 14:52 عصر
http://barnamenevis.org/showthread.php?105430-%D8%AA%D9%87%DB%8C%D9%87-backup-%D8%A7%D8%B2-database-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-C&highlight=backup+%DA%AF%DB%8C%D8%B1%DB%8C


من این کد رو رو برنامه ام گذاشته ام

اگه لازم شد خود برنامه رو هم میزارم

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 14:58 عصر
http://barnamenevis.org/showthread.php?105430-%D8%AA%D9%87%DB%8C%D9%87-backup-%D8%A7%D8%B2-database-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-C&highlight=backup+%DA%AF%DB%8C%D8%B1%DB%8C


من این کد رو رو برنامه ام گذاشته ام

اگه لازم شد خود برنامه رو هم میزارم

اونجا پستی از شما نمیبینم

کد رو همینجا آپ کنید

zahra_no
چهارشنبه 29 تیر 1390, 15:08 عصر
این جا سه روش backup رو گذاشته ام
که از سه روش هم استفاده کردم ولی همان خطا رو میده


private void backup1_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
SqlConnection c = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
try
{
c.Open();
SqlCommand cm = new SqlCommand(@"BACKUP DATABASE PIM TO DISK ='" + this.saveFileDialog1.FileName + "'", c);
//SqlCommand cm = new SqlCommand(@"USE PIM BACKUP DATABASE PIM TO DISK ='" + this.saveFileDialog1.FileName + "'", c);
cm.ExecuteNonQuery();
c.Close();
MessageBox.Show("پشتیبان گیری با موفقیت انجام شد");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
}

private void backup2_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//
DatabaseAssistant.DbAssistant db = new DatabaseAssistant.DbAssistant(@"ZAHRA-PC\SQLEXPRESS", dbname);
db.PerformBackUp(this.saveFileDialog1.FileName, DatabaseAssistant.AnimationStyle.Style1);
}
}

private void backup3_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
this.server = new SQLServer2Class();
this.backup = new Backup2Class();
this.server.LoginSecure = true;
this.server.Connect(@"ZAHRA-PC\SQLEXPRESS", Missing.Value, Missing.Value);
database = (Database2)server.Databases.Item("PIM", Missing.Value);
backup.Database = database.Name;
backup.Files = this.saveFileDialog1.FileName;
backup.SQLBackup(server);
server.DisConnect();
backup = null;
server = null;
}
}

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 15:20 عصر
شرمنده برق رفت

چشم بررسی میکنم

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 15:24 عصر
این جا سه روش backup رو گذاشته ام
که از سه روش هم استفاده کردم ولی همان خطا رو میده


private void backup1_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
SqlConnection c = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
try
{
c.Open();
SqlCommand cm = new SqlCommand(@"BACKUP DATABASE PIM TO DISK ='" + this.saveFileDialog1.FileName + "'", c);
//SqlCommand cm = new SqlCommand(@"USE PIM BACKUP DATABASE PIM TO DISK ='" + this.saveFileDialog1.FileName + "'", c);
cm.ExecuteNonQuery();
c.Close();
MessageBox.Show("پشتیبان گیری با موفقیت انجام شد");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
}

private void backup2_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//
DatabaseAssistant.DbAssistant db = new DatabaseAssistant.DbAssistant(@"ZAHRA-PC\SQLEXPRESS", dbname);
db.PerformBackUp(this.saveFileDialog1.FileName, DatabaseAssistant.AnimationStyle.Style1);
}
}

private void backup3_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
this.server = new SQLServer2Class();
this.backup = new Backup2Class();
this.server.LoginSecure = true;
this.server.Connect(@"ZAHRA-PC\SQLEXPRESS", Missing.Value, Missing.Value);
database = (Database2)server.Databases.Item("PIM", Missing.Value);
backup.Database = database.Name;
backup.Files = this.saveFileDialog1.FileName;
backup.SQLBackup(server);
server.DisConnect();
backup = null;
server = null;
}
}


تو اولی Initial Catalog=PIM رو بردارید چون موقع بکاپ گیری دیتابیس جاری باید مستر باشه

درضمن تو روت درایو ذخیره نکنید یه مسیر عادی مثل C:\backup

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 15:25 عصر
تو دومی از DatabaseAssistant استفاده کردید که من ندارمش

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 15:28 عصر
شما همون متد اول رو استفاده کنید مورد حله

فقط به دیتابیس مستر اشاره کنید تو کانکشن استرینگ یا اصلا دیتاسورس رو نذارید.

موفق باشید.

mehrdad1991h
پنج شنبه 24 شهریور 1390, 19:40 عصر
سلام
من نیاز دارم یه نفر برام این فایل را ریستور کنه
75346
کسی الان میتونه ریستور کنه برام؟
خیلی ممنون میشم اگه ریستورش کنید
سپاس

amin_rezaee
شنبه 26 شهریور 1390, 11:44 صبح
سلام
من نیاز دارم یه نفر برام این فایل را ریستور کنه
75346
کسی الان میتونه ریستور کنه برام؟
خیلی ممنون میشم اگه ریستورش کنید
سپاس
کد restore:
public string RestoreDB(string StrFileName)
{
try
{
string command = "USE MASTER ALTER DATABASE AminLibraryDB SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE AminLibraryDB FROM DISK='" + StrFileName +
"' WITH REPLACE ,RESTART ALTER DATABASE AminLibraryDB SET ONLINE WITH ROLLBACK IMMEDIATE";
SqlCommand oCommand = null;
if (con.State != ConnectionState.Open)
con.Open();
oCommand = new SqlCommand(command, con);
oCommand.ExecuteNonQuery();
Result = "Success";
}
catch (Exception ex)
{
Result = ex.ToString();
}
finally
{
con.Close();
}
return Result;
}

alirezamli
سه شنبه 29 شهریور 1390, 17:01 عصر
دستور را عین مال شما کردم
بازم ارور فرقی نکرد
کلمات زیر را در گوگل سرچ کردم

Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'
تو بعضی سایتهای خارجی گفته بودن بدلیل ورژن دیتابیس هست.
من از sqlExpress2008 استفاده میکنم.
چون دیتابیسم روی SQL2008 ساخته شده بود و VS هم اکسپرس2005 را ساپورت میکنه
منم اجبارا اکسپرس 2008 را جداگانه نصب کردم که VS بتونه دیتابیسم را به پروژم اتچ کنه
کسی میتونه بگه الآن باید چیکار کنم؟:گریه:

من هم دقیقاً این مشکل را دارم کسی از دوستان میتونه راهنمایی کنه ؟
با تشکر از دوستان

csharpprogramer88
سه شنبه 29 شهریور 1390, 17:13 عصر
من هم دقیقاً این مشکل را دارم کسی از دوستان میتونه راهنمایی کنه ؟
با تشکر از دوستان
تو پروفایلم بگرد شاید یه چیزایی گیرت بیاد

alirezamli
سه شنبه 29 شهریور 1390, 17:44 عصر
دوست عزیز گشتم ولی چیزی دستگیرم نشد اگر لینکش را بذارید ممنون میشم

csharpprogramer88
سه شنبه 29 شهریور 1390, 18:01 عصر
دوست عزیز گشتم ولی چیزی دستگیرم نشد اگر لینکش را بذارید ممنون میشم

من خیلی وقته سایت نمیآم برنامه نویسی هم زیاد نمیکنم دقیق بگید مشکلتان چیه ولی برای بکاپ و ریستور کد تو پروفایلم هست ولی لینکشو نمیدونم

Esmail Solhkhah
شنبه 02 مهر 1390, 18:14 عصر
دوست عزیز دیتابیس رو ریستور کردم موردی نداشت ، فقط دقت کنید دوتا بکاپ رو شامل میشه

بنده آخریشو ریستور کردم

کدتون هم بدون مورد اجرا میشه

مطمئن هستید تنظیمات SQL SERVER شما با اونی که تو کانکشن استرینگ دادید برابره ؟

mehrdad1991h
شنبه 02 مهر 1390, 18:20 عصر
بله یکسان هستند
و این خوب منم همینا ریستور میکنم ولی برنامه نمیشناسدش
برنامه را اجرا نمیکنه قبل از ورود به صفحه لاگین میگه ارتباط با پایگاه داده برقرار نشد

Esmail Solhkhah
شنبه 02 مهر 1390, 18:23 عصر
یعنی شما الان این دیتابیسی رو که بنده فرستادم اتچ کردید

و SQL SERVER با اینستنس SQLEXPRESS نصب شده و Authentication هم درسته

اگه همه اینا درسته کد خطا رو بیزحمت بذارید (البته کامل با Message و StackTrace)

eligol
جمعه 22 مهر 1390, 16:32 عصر
سلام
من دو button دارم که با یکی می خوام عمل بکاپ را انجام بدهد و با دیگری عمل بازیابی از برنامه نویسان خواهش می کنم کمکم کنن
من این کد را نوشتم ولی نمی دونم چرا بکاپ نمیگیره
private void button1_Click(object sender, EventArgs e)
{
try
{

saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackupFile" + DateTime.Now.ToShortDateString();
saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files (*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";

string strfilename;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{

strfilename = saveFileDialog1.FileName;
string command = @"BACKUP DATABASE brt_Data TO DISK='" + strfilename + "'";
con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\brt_Data.mdf;Integrated Security=True;User Instance=True");
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand ocammand = new SqlCommand(command, con);
ocammand.ExecuteNonQuery();
MessageBox.Show("complate");
}
}
catch
{
MessageBox.Show("error");
}
}

pooria_googooli
جمعه 22 مهر 1390, 16:47 عصر
با کد زیر میتونی بک آپ بگیری :

String Strbackup1,Strbackup2;
DateTime dteDate;
dteDate = DateTime.Now;

Strbackup1 = "backup.bak";
Strbackup2 = Application.StartupPath + @"\backup\" ;

saveFileDialog1.FileName = Strbackup2 + Strbackup1 ;
saveFileDialog1.InitialDirectory = Strbackup2;
saveFileDialog1.ShowDialog();

textBox1.Text = saveFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database tel to disk = '" + @textBox1.Text.ToString() + "'");
//System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database AccSlick1 to disk = 'd:\a.bak'");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con ;
con.Open();
cmd.ExecuteNonQuery();

this.Close();

اینم کد بازیابی اطلاعات :
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 AccSlick1 SET SINGLE_USER with ROLLBACK IMMEDIATE; RESTORE DATABASE AccSlick1 FROM disk = " + @textBox1.Text.ToString() + " with REPLACE;ALTER DATABASE AccSlick1 SET MULTI_USER");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE tel SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE tel FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE tel SET MULTI_USER");

//System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"use [master]; RESTORE DATABASE AccSlick1 FROM disk = 'G:\\a.bak' with REPLACE;");

//System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=master;user=sa;PWD=1234");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
this.Close();

eligol
شنبه 23 مهر 1390, 23:01 عصر
با کد زیر میتونی بک آپ بگیری :

String Strbackup1,Strbackup2;
DateTime dteDate;
dteDate = DateTime.Now;

Strbackup1 = "backup.bak";
Strbackup2 = Application.StartupPath + @"\backup\" ;

saveFileDialog1.FileName = Strbackup2 + Strbackup1 ;
saveFileDialog1.InitialDirectory = Strbackup2;
saveFileDialog1.ShowDialog();

textBox1.Text = saveFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database tel to disk = '" + @textBox1.Text.ToString() + "'");
//System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database AccSlick1 to disk = 'd:\a.bak'");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con ;
con.Open();
cmd.ExecuteNonQuery();

this.Close();

اینم کد بازیابی اطلاعات :
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 AccSlick1 SET SINGLE_USER with ROLLBACK IMMEDIATE; RESTORE DATABASE AccSlick1 FROM disk = " + @textBox1.Text.ToString() + " with REPLACE;ALTER DATABASE AccSlick1 SET MULTI_USER");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE tel SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE tel FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE tel SET MULTI_USER");

//System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"use [master]; RESTORE DATABASE AccSlick1 FROM disk = 'G:\\a.bak' with REPLACE;");

//System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=master;user=sa;PWD=1234");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
this.Close();

با این کد هم من نتیجه نگرفتم کسی کد بهتری نداره که جواب داده باشه

elena2007
یک شنبه 24 مهر 1390, 16:24 عصر
string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\photograph.mdf] TO DISK = '" + Application.StartupPath + "\\backup.bak' WITH NOFORMAT, NOINIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;

string scnn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\photograph.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
oConnection = new SqlConnection(scnn);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
oConnection.Close();
MessageBox.Show("پشتیبانی از اطلاعات با موفقیت انجام شد");

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\photograph.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
con.Open();
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\photograph.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\photograph.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\photograph.mdf] FROM DISK ='" + Application.StartupPath + "\\backup.bak' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = con;
cmd.ExecuteNonQuery();

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

cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازگردانی اطلاعات با موفقیت انجام شد");

bazardeh
یک شنبه 24 مهر 1390, 22:02 عصر
اگر جواب نگرفتید پیغامی که به شما میده رو در اینجا قرار دهید

mahdi5121
جمعه 25 آذر 1390, 22:00 عصر
با سلام ...
وقتی از طریق برنامه ایی که نوشتم به دیتا بیس مورد نظر وصل می شم؛ می تونم از همون دیتا بیس بکاپ بگیرم اما وقتی می خوام که اون رو ریستور کنم، ارور می ده؛ فکر کنم به خاطر اینه که می گه فایل هایی که می خوا برگردونی در حال حاظر موجوده؛ به خاطر همین می خوام که اول دیتا بیس حذف بشه و بعد ریستوری بشه که در این صورت هم ارور می ده که دیتا بیس در حال استفاده است یعنی برنامه داره از اون استفاده می کنه.

حالا چیکار کنم که وقتی برنامه در حال اجراست و داره از دیتا بیس استفاده می کنه بشه بکاپ همون دیتا بیس رو ریستور کرد..

ممنون ...

reza_mostafavi63
جمعه 25 آذر 1390, 22:55 عصر
كانكشن هايي كه تو برنامه ايجاد كردي رو Close كن يا بهتر از اون مساوي Null قرار بده تا ارتباط قطع بشه البته اگه MultiUser باشه بايد همه ارتباط ها از بين برن .... اينطوري فك كنم بشه

bahram1100
جمعه 25 آذر 1390, 23:12 عصر
کانکشنهای من همش close هستند.
راه دیگه چیه؟

mahdi5121
جمعه 25 آذر 1390, 23:17 عصر
کانکشن رو Closeکردم ولی نشد.

reza_mostafavi63
جمعه 25 آذر 1390, 23:36 عصر
تست كردم درست كار كرد . مطمئن بشيد كه Close هست .
System.IO.File.Delete("DB.mdb");

AliSaeedi_v
جمعه 25 آذر 1390, 23:43 عصر
سلام داداش من امروز کد restoreرو نوشتم ربطی به این که بانک وجود داشته باشه نداشت برات میزام
امتحان کن!!

string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
string cm = @"RESTORE DATABASE [EDB] FROM DISK ='c:\users\alireza\desktop\edb.bak'";
SqlConnection con = newSqlConnection(cs);
con.Open();
SqlCommand cmd = newSqlCommand(cm, con);

cmd.ExecuteNonQuery();
con.Close();

sobaisobai
جمعه 25 آذر 1390, 23:47 عصر
تست كردم درست كار كرد . مطمئن بشيد كه Close هست .
System.IO.File.Delete("DB.mdb");
سلام
دوست عزیز درست کار نمیکنه
منم همین مشکل رو دارم
تا وقتی برنامه بسته نشه اجازه دسترسی به دیتابیس وجود نداره

sobaisobai
جمعه 25 آذر 1390, 23:48 عصر
سلام داداش من امروز کد restoreرو نوشتم ربطی به این که بانک وجود داشته باشه نداشت برات میزام
امتحان کن!!
string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
string cm =@"RESTORE DATABASE [EDB] FROM DISK ='c:\users\alireza\desktop\edb.bak'";
SqlConnection con = new SqlConnection(cs);
con.Open();
SqlCommand cmd = new SqlCommand(cm, con);

cmd.ExecuteNonQuery();
con.Close();

واسه دیتابیس اکسس چی؟

zarrinnegar
شنبه 26 آذر 1390, 00:28 صبح
زمانی که برای restore کردن دیتابیس به sql وصل میشی نام دیتابیس رو چی میزنی؟ همون دیتابیس خودتو؟ یا master رو؟

اگه master رو بزنی کار میکنه مگر اینکه یا sql بازه و توش دیتابیس بازه و یا کاربر دیگه ای داره کار میکنه مشکل سوم هم اینه که ویژوالت بازه و کانکشن به sql زده و باز مونده با exe برنامه کارکن ویژوال رو ببند چارمی دیگه وجود نداره:لبخندساده:

اکسس هم که یه فایله که جایگزین میکنی مثل sql سرویسی نداره که یاز نگه داره

sobaisobai
شنبه 26 آذر 1390, 10:33 صبح
اکسس هم که یه فایله که جایگزین میکنی مثل sql سرویسی نداره که یاز نگه داره
سلام
اینو خودم میدونستم
ولی اجازه جایگزینی رو نمیده

Mahmoud Zaad
شنبه 26 آذر 1390, 10:50 صبح
سلام
اینو خودم میدونستم
ولی اجازه جایگزینی رو نمیده

سلام
string PathToRestoreDB = Environment.CurrentDirectory + @"\ResDB.mdb";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "backup files (*.bk)|*.bk";
if (ofd.ShowDialog() == DialogResult.OK)
{
string Filetorestore = ofd.FileName;
File.Copy(Filetorestore, PathToRestoreDB, true);
MessageBox.Show("پشتیبان با موفقیت بازیابی شد", "بازیابی پشتیبان");
}
مشکل شما توی این خطه: File.Copy(Filetorestore, PathToRestoreDB, true);
وقتی true قرار بدی اجازه جایگزینی میده.

az.heidarzadeh
شنبه 26 آذر 1390, 11:37 صبح
منم مشکل restore کردن بانکم و دارم، با اینکه یه کد نوشتم اما روی یه سیستم جواب میده روی یکی دیگه جواب نمیده یا روی همون سیستمهم گاهی جواب میده گاهی جواب نمیده نمیدونم مشکل چی میتونه باشه...


string SqlStr = "USE master RESTORE DATABASE MyDB FROM DISK ='" + txtPath.Text + "' WITH REPLACE";
clsMe.exect(SqlStr);

sobaisobai
شنبه 26 آذر 1390, 11:48 صبح
سلام
string PathToRestoreDB = Environment.CurrentDirectory + @"\ResDB.mdb";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "backup files (*.bk)|*.bk";
if (ofd.ShowDialog() == DialogResult.OK)
{
string Filetorestore = ofd.FileName;
File.Copy(Filetorestore, PathToRestoreDB, true);
MessageBox.Show("پشتیبان با موفقیت بازیابی شد", "بازیابی پشتیبان");
}
مشکل شما توی این خطه: File.Copy(Filetorestore, PathToRestoreDB, true);
وقتی true قرار بدی اجازه جایگزینی میده.
سلام
دوست عزیز
اینم میدونستم!!
وقتی برنامه درحال اجراست اجازه Restore کردن رو نمیده
میگه فایل مورد نظر توسط یه برنامه دیگه اشغال شده

Mahmoud Zaad
شنبه 26 آذر 1390, 12:23 عصر
سلام
دوست عزیز
اینم میدونستم!!
وقتی برنامه درحال اجراست اجازه Restore کردن رو نمیده
میگه فایل مورد نظر توسط یه برنامه دیگه اشغال شده
این فایل رو از اینترنت گرفتم همین کدهایی هست که نوشتم،ببین برای شما کار میکنه!

mahdi5121
شنبه 26 آذر 1390, 21:32 عصر
خب فایل شما کار می کنه؛ منتها برنامه ی شما فقط بکاپ و ریستوری می کنه .
من به جای فایل mdb شما، فایل mdf خودم رو نوشتم ولی اصلا" دیگه برای بکاپ هم ارور می ده :

http://1.vped.comule.com/images/e9d17e41f784.png

linux
شنبه 26 آذر 1390, 21:45 عصر
restore کردن به مراتب کار خیلی حساس تری هست از backup گرفتن در پروژه های بزرگ این وظیقه dba هست که ریستور کند. در هنگاه restore دیتابیس نباید توسط سایرین در حال استفاده کردن باشد.

elahejafari
یک شنبه 27 آذر 1390, 08:38 صبح
این کد تمام بکاپ هایی که بغیر از مسیر My Documents , desktop باشد ریستور میکند

OpenFileDialog my = new OpenFileDialog();
my.Filter = "Backup files (*.bak)|*.bak";
if (my.ShowDialog() == DialogResult.OK)
{ SqlConnection.ClearAllPools();
SqlConnection objConnection = new SqlConnection("Data Source=.;Initial Catalog=" + name_db + ";Integrated Security=True");
SqlCommand objCommand = new SqlCommand();
query_string = "USE [master]; RESTORE DATABASE [" + name_db + "] FROM DISK = N'" + my.FileName + "' WITH NOUNLOAD, REPLACE, STATS = 10";
objCommand.Connection = objConnection;
objCommand.Connection.Open();
objCommand.CommandText = query_string;
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
MessageBox.Show("نسخه پشتیبان با موفقیت جایگزین شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

sadaf_
یک شنبه 27 آذر 1390, 11:52 صبح
من بکاپم درست کار می کنه ولی رستور هنگ می کنه
ولی رستور رو بردم از یک پروژه دیگه درست کار کرد
به خاطر اینکه رستور زمانی اتفاق می افته که برنامه run نباشه به اون دیتابیسی که می خواهیم بکاپ بگیریم
راه کار چیه دوستان؟

reza_mostafavi63
یک شنبه 27 آذر 1390, 13:40 عصر
اگه ديتابيست اكسس هست كه با همون كدي كه قبلا گذاشتم كار خواهد كرد ... مطمئنم كه ميگم ..چون رفتم تست كردم ... حالا اگه تو برنامه شما نميشه ، مشكل از جاي ديگست.... اگه خواستي برنامه رو بزار تا كمكت كنم .

ولي اگه ديتابيست SQL Server هست ... بايد بگم تا زماني كه سرويس اس كيو ال رو Stop نكني .... نميتوني به فايل هاي ديتابيست دسترسي داشته باشه (حتي نميتوني كپي كني) . پس اول بايد يه راهي بره Stop كردن سرويس پيدا كني .

يك نكته ديگه كه هست اينه كه : اگه ديتابيست رو از داخل VS به پروژت اضافه كني ... VS يك نسخه از اون رو در پوشه اصلي در كنار فايل هاي ديگه نگه ميداره و هر سري با اجراي برنامه ..يك كپي از اون رو به ApplicationDirectory ميندازه ... پس دقت كنيد اين شمارو به اشتباه نندازه .

nasimsltn7@gmail.com
جمعه 22 اردیبهشت 1391, 17:02 عصر
سلام.
من از یه تابع برای گرفتن back up استفاده میکنم ولی error mide ???!!!
sqlserver2008,C#‎
private void Bakfile(string file)
{
try
{
string sql = @"BACKUP DATABASE TO FIX DISK='" + file + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand command = null;
SqlConnection connection = null;
connection = new SqlConnection("Data Source=.;Initial Catalog=dbtest;Integrated Security=True");
if (connection.State != ConnectionState.Open)
connection.Open();
command = new SqlCommand(sql, connection);
command.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بكاپ انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}

error :incorrect syntax near the keyword TO.

omid_csh
جمعه 22 اردیبهشت 1391, 17:29 عصر
سلام
شما اسم دیتابیسی که میخواین ازش Backup بگیرین رو ذکر نکردین.
BACKUP DATABASE DB TO DISK = 'db.bak'

nasimsltn7@gmail.com
جمعه 22 اردیبهشت 1391, 20:46 عصر
سلام
شما اسم دیتابیسی که میخواین ازش Backup بگیرین رو ذکر نکردین.
BACKUP DATABASE DB TO DISK = 'db.bak'
من sql string رو تغییر دادم ولی بازم همون error رو میده :افسرده:

string sql = @"BACKUP DATABASE TO FIX DISK= 'dbtest.bak''"+file+"'";

omid_csh
جمعه 22 اردیبهشت 1391, 20:57 عصر
سلام
اینجوری بنویس
string sql = @"BACKUP DATABASE dbtest TO DISK='" + file + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand command = null;
SqlConnection connection = null;
connection = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=True");

nasimsltn7@gmail.com
جمعه 22 اردیبهشت 1391, 21:11 عصر
بازم خطا ،تغییری نکرد ،error قبل رو میده:افسرده:

ma.rad
جمعه 22 اردیبهشت 1391, 21:52 عصر
سلام دوست عزیز
کد کاملش رو میزارم:
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\dbName.mdf;Integrated Security=True;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("ايجاد نسخه پشتيبان با خطا مواجه گرديد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

ma.rad
جمعه 22 اردیبهشت 1391, 21:57 عصر
اگر بانک اتچ شده(سرور) باید اول دی تچ کنید بعد بکاپ بگیرید.
موفق باشید

nasimsltn7@gmail.com
جمعه 22 اردیبهشت 1391, 22:04 عصر
ببخشید یه سوال ،من مبتدی هستم .
نیازی نیست کد رو تغییر بدم ؟
آخه error میده :Invalid value for key 'attachdbfilename'.
وقتی قسمت connection آدرس دیتا بیس خودم رو هم مینویسم بازم error میده :افسرده:

nasimsltn7@gmail.com
جمعه 22 اردیبهشت 1391, 22:53 عصر
اگه ممکنه پروژه رو بفرستید.
بفرمایید این برنامه من هستش.

Mahmoud.Afrad
شنبه 23 اردیبهشت 1391, 07:18 صبح
جناب nasimsltn7@gmail.com (http://barnamenevis.org/member.php?232461-nasimsltn7-gmail.com) شما نام یا مسیر دیتابیس رو مشخص نکردید از کجا بدونه از چی بکاپ بگیره.
اگر دیتابیس اتچ هست به جای dbname نام دیتابیس رو بنویسید و اگر نیست مسیر فایل دیتابیس رو به جاش بنویسید.

uniqueboy_ara
شنبه 23 اردیبهشت 1391, 20:37 عصر
سعی کنید برای اینکه به این مشکلات بر نخورید از توابع SMO استفاده کنید
خیلی راحت تر و قشنگ تر میشه هم بکاپ گرفت، هم Restore کرد

الماس شهر
یک شنبه 21 خرداد 1391, 09:45 صبح
سلام من تو برنامم میخوام یه قسمت به عنوان بکاپ گیری داشته باشم لطفاً راهنماییم کنید چجوری؟

Mahmoud.Afrad
یک شنبه 21 خرداد 1391, 09:59 صبح
از این متد ها هم میتونید استفاده کنید
private void backup(string DestinationPath)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=" + System.Environment.MachineName + @"\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Datab ase.mdf;Integrated Security=True;");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//'گرفتن نام کامل دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "USE [MASTER] BACKUP DATABASE [" + dbname + "] TO DISK =N'" + DestinationPath + ".bak" + "'";
cmd.Connection = new SqlConnection("Data Source=" + System.Environment.MachineName + @"\SQLEXPRESS;Integrated Security=True;");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("نسخه پشتیبان با موفقیت ایجاد شد");
}
catch (Exception ex)
{
MessageBox.Show("در تهیه نسخه پشتیبان حطایی رخ داده است\n" + ex.ToString());
}
}

private void Restore(string BackupPathForRestore)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database.mdf;Integrated Security=True;Connect Timeout=10");
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 = N'" + BackupPathForRestore + "';ALTER DATABASE [" + dbname + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("بازگردانی نسخه پشتیبان با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

jivago
یک شنبه 28 خرداد 1391, 11:51 صبح
سلام
از این کد استفاده کن :

ALTER DATABASE SandoghFamily SET SINGLE_USER with ROLLBACK IMMEDIAT use master; RESTORE DATABASE SandoghFamily FROM DISK='" + openFileDialog1.FileName + "' with REPLACE;");

conroe7000
پنج شنبه 16 آذر 1391, 01:00 صبح
سلام
من تو یک پروژه ای از دیتابیس sql express 2008 در c#.Net2010 استفاده کرده ام
و توسط کانکشن دستی که کانکشن استرین می سازم بهش وصل میشم و اطلاعات رو بر میدارم و ثبت می کنم
می خوام با استفاده از یک کلاس و یک دکمه از دیتابیسم بک آپ بگیرم و بعدا با یک دکمه ی دیگر بازیابی کنم
این امر محقق نمیشه چرا که دیتا بیس من اتچ نشده
من از یک سورس کلاس آماده که از سرویس smo استفاده می کرد استفاده کردم روی دیتابیس های اتچ شده جواب میده و از master بک آپ میکیره اما از دیتا بیس من چون اتچ نشده و در آدرس برنامه ی ساخته شده هست بک آپ نمیگیره
البته همونم ککه از مستر بک آپ می گرفت بازیابیش مشکل داشت
لطفا راهنمایی کنید و در صورت امکان یک سمپل آماده و ساده برای من آپلود کنید
با تشکر از اساتید

mousa1992
پنج شنبه 16 آذر 1391, 01:19 صبح
connectionString :
Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\QuranDB.mdf;Integrated Security=True;User Instance=True");


CreateBackup:
public void CreateBackUp(string Path)
{
string Command = @"backup database [" + Application.StartupPath + @"\QuranDB.mdf] to disk='" + Path + "'";

CMD = new SqlCommand(Command, DAl.Connection);
DAl.Connect();
CMD.ExecuteNonQuery();
DAl.DisConnect();
}

Restore .bak File :
public void RestoreBackUp(string Path)
{
SqlConnection.ClearAllPools();
DAl.Connect();
string FirstCommand = @"USE master;ALTER DATABASE ["+Application.StartupPath+"\\QuranDB.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
CMD = new SqlCommand(FirstCommand, DAl.Connection);
CMD.ExecuteNonQuery();
string Command = @"restore database ["+Application.StartupPath+@"\QuranDB.mdf] from disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
CMD.ExecuteNonQuery();
DAl.DisConnect();
}

حالشو ببر :چشمک:

king_of_lionsss
سه شنبه 28 آذر 1391, 00:58 صبح
آقاي موسي سلام
اون دوستمون كه اين سوالو پرسيده فكر كنم تشكر يادش رفته
بنده تست نمودم .جواب داد بهم
كمال تشكر و قدر اني رو دارم از شما

conroe7000
پنج شنبه 30 آذر 1391, 21:18 عصر
سلام
دستتون درد نکنه
من واسه امتحانات کمی درگیرم زیاد سر نمیزدم
ممنون از پاسخ کاملتون

اما من یک دانشجوی مبتدیم
این کدها رو کجا بزارم ؟
متغییر هایی که تعریف کردین از چه نوعی هست ؟ DAl چیه ؟ دیتا اداپتر هستش ؟
فقط همین کدها کافیه ؟ کد دیگری نیاز نیست ؟
آیا یوزینگ خاصی نیاز هست یا نه ؟
اون کلاسی رو که (smo) دانلود کرده بودم هم بزارم تو پروژه ؟
باید منو ببخشید که انتظار دارم یکی لقمه رو برام بجوه و بزاره دهنم اما گفتم که این به خاطر مبتدی بودنمه
انشا الله کمی که پیشرفته تر شدم زکات اینها رو میدم و با همین صحه صدری که شما اساتید دارین و جواب ما رو میدین رفتار کنم

conroe7000
پنج شنبه 30 آذر 1391, 22:11 عصر
من به این شکل نوشتم ارور میده نمیدونم دیگ چی کار کنم
DAl رو از نوع SQLDataAdapter تعریف کردم اما Connect نداشت

http://iuploads.persiangig.com/1.png

با یک حول کوچولو تمومه به خدا
ممنون

ordebehesht
جمعه 01 دی 1391, 02:48 صبح
از لینک زیر اگه دوست داشتی میتونی استفاده کنی
http://www.persiadevelopers.com/articles/sql-backup-zip.aspx

mousa1992
جمعه 01 دی 1391, 03:22 صبح
سلام دوستان خوبم
معذرت دیر جواب میدم

بنده تست نمودم .جواب داد بهم
كمال تشكر و قدر اني رو دارم از شما خوشحالم کارتون راه افتاد

DAl رو از نوع SQLDataAdapter تعریف کردم اما Connect نداشت دوست عزیز معذرت که توضیحات کامل نبود
DAL در واقع مخفف DataAccessLayer هست که کلاسی رو با این نام تعریف کردم و اونجا با بانک ارتباط برقرار میکنم (در مورد برنامه نویسی سه لایه مطالعه کن)
هر جا که DAl.Connect یود و یا Disconnect شما به جای اون ارتباط با بانک رو Open و Close کن
توی کد شما نمونه ای که ساختید Connection نام داره پس Connection.Open(); و ...
نه دوست عزیز نیازی به کلاس های smo نداری
سوالی بود در خدمتم
موفق باشید

ordebehesht
جمعه 01 دی 1391, 03:43 صبح
من به این شکل نوشتم ارور میده نمیدونم دیگ چی کار کنم
DAl رو از نوع SQLDataAdapter تعریف کردم اما Connect نداشت

http://iuploads.persiangig.com/1.png

با یک حول کوچولو تمومه به خدا
ممنون

dal فکر کنم از یه کلاس نمونه سازی کرده و توش رشته اتصال رو ذخیره کرده

conroe7000
جمعه 01 دی 1391, 13:12 عصر
ممنون مشکلم حل شد
خیلی از ما متشکرم

mohamadreza#
یک شنبه 17 دی 1391, 13:10 عصر
من تقریبا یه چنین حالتی بر خورده بودم ، وقتی کاربر می خواست برنامه رو لاگین کنه قبل از لاگین منطقی(لود شدن فرم لاگین و هیچ عمل خاصی صورت نگرفته فقط فرمی لود شده) و قبل از باز شدن هیچ اتصالی رستور انجام شه...

برای بک آپ گرفتن هم ، این کار غیر منطقی هست که شما هنگامی که برنامه در حال اجراست بک آپ بگیری ، این کارو هم میتونی هنگام خروج از برنامه دقیقا وقتی اتصالات بسته شدند انجام بدی...

:لبخندساده:

mousa1992
یک شنبه 17 دی 1391, 13:32 عصر
دوستان این تاپیکو (http://barnamenevis.org/showthread.php?372118-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-sql-express-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=1655439#post1655439)ببینید

firoozi90
دوشنبه 18 دی 1391, 11:23 صبح
سلام دوستان
اونطور که از پست های قبلی متوجه شدم خیلی از دوستان دنبال کد بکاپ و ریستور پایگاه داده هستند که درست کار کنه و مشکلی نداشته باشه. و به این دلیل تصمیم گرفتم لینک دانلود کدی رو که خودم نوشتم و کاملا جواب داده براتون بزارم که شما دوستای عزیز هم بتونید استفاده کنید.
برای دانلود روی لینک زیر کلیک کنید

دانلود سورس backup و restore از دیتابیس sql با زبان سی شارپ (http://papro.blogfa.com/post/79)
پسورد:www.papro.blogfa.com

danialafshari
دوشنبه 18 دی 1391, 17:46 عصر
میزنم ولی Error میده:

private void button1_Click(object sender, EventArgs e)
{
try
{
bool bBackUpStatus = true;

Cursor.Current = Cursors.WaitCursor;

if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\dbafshari.bak"))
{
if (MessageBox.Show(@"??? ???????? ??????? ?????? ???????", "??????? ????? ??? ???", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\dbafshari.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");

if (bBackUpStatus)
{
//Connect to DB
SqlConnection connect;
string con = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\dbafshari.mdf;Integrated Security=True;User Instance=True";
connect = new SqlConnection(con);
connect.Open();
//-------------------------------ww.papro.blogfa.com--------------------------------

//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database dbafshari to disk ='d:\SQLBackup\dbafshari.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------

connect.Close();

MessageBox.Show("انجام شد", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}


بانک رو هم توسط SQL Express 2005 ساختم بعد DeAttach کردم بعد کد های بالا رو زدم بازم Error
مشکل این کد چیه؟

firoozi90
دوشنبه 18 دی 1391, 21:34 عصر
کانکشن استرینگتون مشکل داره احتمالا.
از عواقب کپی و پیست هستش.لطفا بررسی کنید

danialafshari
دوشنبه 18 دی 1391, 22:17 عصر
کانکشن استرینگتون مشکل داره احتمالا.
از عواقب کپی و پیست هستش.لطفا بررسی کنید

کجاش مشکل داره فقط نام بانک رو جایگزین کردم
اگر زحمتی نیست در قالب یک سورس به همراه بانکش اینجا ضمیمه کنید
با تشکر

h_m0zhdeh
دوشنبه 18 دی 1391, 23:07 عصر
من کد رو یه کم تغییر دادم خطای بالا رو دیگه نمیده ولی یه خطای جدید میده(ExecuteNonQuery: Connection property has not been initialized)

bool bBackUpStatus = true;

Cursor.Current = Cursors.WaitCursor;

if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\MelkAra_Db.bak"))
{
if (MessageBox.Show(@"??? ???????? ??????? ?????? ???????", "??????? ????? ??? ???", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\MelkAra_Db.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");

if (bBackUpStatus)
{
//Connect to DB
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--------------------------------

//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database [" + System.Windows.Forms.Application.StartupPath + "\\MelkAra_Db.mdf] to disk ='d:\\SQLBackup\\MelkAra_Db.bak' with init,stats=10");
//command = new SqlCommand(@"backup database MelkAra_Db to disk ='d:\SQLBackup\MelkAra_Db.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------

connect.Close();

MessageBox.Show("??????? ???? ?? ?????? ????? ??", "??????? ???", MessageBoxButtons.OK, MessageBoxIcon.Information);
}


اینم کدمه

h_m0zhdeh
دوشنبه 18 دی 1391, 23:15 عصر
فهمیدم مشکل از چی بود
آقای danialafshari این کد رو امتحان کنید همونطور که گفتم تغییر یافته کد دوستمون firoozi90 هست.
امیدوارم شما هم مثل من جواب بگیرید


bool bBackUpStatus = true;

Cursor.Current = Cursors.WaitCursor;

if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\MelkAra_Db.bak"))
{
if (MessageBox.Show(@"??? ???????? ??????? ?????? ???????", "??????? ????? ??? ???", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\MelkAra_Db.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");

if (bBackUpStatus)
{
//Connect to DB
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--------------------------------

//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database [" + System.Windows.Forms.Application.StartupPath + "\\MelkAra_Db.mdf] to disk ='d:\\SQLBackup\\MelkAra_Db.bak' with init,stats=10", connect);
//command = new SqlCommand(@"backup database MelkAra_Db to disk ='d:\SQLBackup\MelkAra_Db.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------

connect.Close();

MessageBox.Show("??????? ???? ?? ?????? ????? ??", "??????? ???", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

firoozi90
سه شنبه 19 دی 1391, 10:50 صبح
دوستان همونطور که گفتم مشکل شما کانکشن استرینگتون هست.من در پروژه ی مربوط به کد خودم دیتابیس را کپی کردن در پوشه ی دیباگ برنامه و سپس کانکشنم رو به اون وصل کردم که دیگه نیازی به اتچ کردن دیتابیس نباشه.
حالا شما می تونید کانکشن استرینگ من رو عوض کنید و کانکشن خودتون رو بزارید

پیام حیاتی
چهارشنبه 27 دی 1391, 21:12 عصر
سلام
چطور میتونم برای برنامه دفترچه تلفن یه دکمه Bakup ایجاد کنم؟

danialafshari
چهارشنبه 27 دی 1391, 22:21 عصر
دیتابیس برنامتون چیه؟

پیام حیاتی
چهارشنبه 27 دی 1391, 23:30 عصر
دیتابیس SQL هست.

vapa_71
دوشنبه 02 بهمن 1391, 14:30 عصر
دوستان من این کد رو از توی تایپیک ها گیر آوردم اما ارور میده کسی میدونه مشکل چیه
از دیروز دارم میگردم اما کد مناسبی پیدا نکردم


bool bBackUpStatus = true;

Cursor.Current = Cursors.WaitCursor;

if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\Report_db1.bak"))
{
if (MessageBox.Show(@"اولی", "اولی", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\Report_db1.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");

if (bBackUpStatus)
{
//Connect to DB
SqlConnection connect = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Report_db.mdf;Integrated Security=True;User Instance=True");
connect.Open();
//-------------------------------ww.papro.blogfa.com--------------------------------

//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database Report_db to disk ='d:\SQLBackup\Report_db1.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------

connect.Close();

MessageBox.Show("دومی", "دومی", MessageBoxButtons.OK, MessageBoxIcon.Information);

vapa_71
دوشنبه 02 بهمن 1391, 14:34 عصر
اینم اروری که میده

من از بانک express استفاده میکنم

sgn2006
دوشنبه 02 بهمن 1391, 14:43 عصر
سلام
این خطا می گه Report_db وجود نداره ، این دیتا بیس رو درست کردی؟
مسیرش درسته؟ یعنی همچین مسیری وجود داره؟

vapa_71
دوشنبه 02 بهمن 1391, 14:48 عصر
دیتابیس داخل پوشه خود برنامه هست

sgn2006
دوشنبه 02 بهمن 1391, 15:23 عصر
به این لینک یه نگاهی بنداز
http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=ExpressBackups&referringTitle=Home

یه پروسیجر تعریف می کنه که به صورت اتوماتیک می تونی از همه DB هات Backup بگیری و همچنین هنگام صدا زدن پروسیجر هم می تونی اسم DB رو بدی

امیدوارم با این مشکلت حل بشه

sgn2006
دوشنبه 02 بهمن 1391, 15:25 عصر
اینم خوبه
http://www.codeproject.com/Articles/15407/SQL-Agent-A-Job-Scheduler-Framework

یه سورس که Backup می گیریه
البته من تستش نکردم !

sgn2006
دوشنبه 02 بهمن 1391, 16:00 عصر
این err که داره می ده خیلی غیر منطقیه ...
شما connection زدی به SQLEXPRESS\. بعد داری یه دیتا بیس بک آپ می گیری...

حالا می گه دیتا بیس وجود نداره : (چند دلیل داره)
1- دیتا بیس وجود نداره
2- اسم رو اشتباه زدی
3- اون مسیر ReadOnly هست
4- مسیر اشتباه
5- کانکت نشده (برای کانکت شدن فقط connectionstring کافی نیست یه کاری باهاش انجام بده ببین کار می کنه)

البته یه چیزی می گم مطمئن نیستم : زمانی که داری connection را تعریف می کند از \ استفاده کردی توی #C همچین مواقعی از \\ استفاده می کنن البته یادم نیست توی command هم همینجور باشه...

vapa_71
دوشنبه 02 بهمن 1391, 16:07 عصر
این کد رو توی یکی از تایپیک ها دیدم و واسه خودم تغییر دادم دیتابیس من express هست و داخل پوشه خود برنامه قرار داره

mortezasar
دوشنبه 02 بهمن 1391, 17:09 عصر
سلام دوست عزیز سرچ و پیدا کردنش فقط 30 ثانیه طول کشید
اینم آدرس تاپیک
http://barnamenevis.org/showthread.php?326929-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%DA%A9%D8%A7%D9%BE-%D9%88-%D8%B1%DB%8C%D8%B3%D8%AA%D9%88%D8%B1-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&highlight=%D8%A8%DA%A9%D8%A7%D9%BE+%DA%AF%DB%8C%D8 %B1%DB%8C

vapa_71
دوشنبه 02 بهمن 1391, 17:42 عصر
سلام دوست عزیز سرچ و پیدا کردنش فقط 30 ثانیه طول کشید
اینم آدرس تاپیک
http://barnamenevis.org/showthread.php?326929-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%DA%A9%D8%A7%D9%BE-%D9%88-%D8%B1%DB%8C%D8%B3%D8%AA%D9%88%D8%B1-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&highlight=%D8%A8%DA%A9%D8%A7%D9%BE+%DA%AF%DB%8C%D8 %B1%DB%8C

داداش حداقل یه نگاه مینداختی خب منم از همین کد استفاده کردم دیگه

vapa_71
دوشنبه 02 بهمن 1391, 18:28 عصر
بچه ها این نمونه برنامه منه اگه کسی میتونه واسه این برنامه یک بکاپ و ریستور بذاره تا منم اشتباهم رو متوجه بشم

ممنون از دوستان

uniqueboy_ara
دوشنبه 02 بهمن 1391, 22:25 عصر
اینم از جواب شما :)

vapa_71
دوشنبه 02 بهمن 1391, 22:39 عصر
این ارور واسه چیه ؟ http://s1.picofile.com/file/7628752896/eror_report.jpg

vapa_71
دوشنبه 02 بهمن 1391, 23:28 عصر
به گزارش گیری گیر داده مشه یک مقدار در مورد کاری که کردی توضیح بدی تا خودم انجام بدم
البته نیاز به توضیح کلی دارم چون تازه کارم

ma.rad
دوشنبه 02 بهمن 1391, 23:52 عصر
این ارور واسه چیه ؟ http://s1.picofile.com/file/7628752896/eror_report.jpg

خطایی که تو قسمت error ها گرفته چیه اون ها رو بزار

danialafshari
دوشنبه 02 بهمن 1391, 23:55 عصر
سلام
کد رو پیدا کردید یا نه؟
خودم مدت زیادی دنبالش بودم و در نهایت درستش کردم. اگر پیدا نکردید بگید تا اینجا بزارمش
موفق باشید

vapa_71
سه شنبه 03 بهمن 1391, 00:02 صبح
سلام
کد رو پیدا کردید یا نه؟
خودم مدت زیادی دنبالش بودم و در نهایت درستش کردم. اگر پیدا نکردید بگید تا اینجا بزارمش
موفق باشید

خدا خیرت بده پدرم در اومد 2 روزه دارم از این تایپیک به اون تایپیک اگه لطف کنی بذاری که ممنون میشم

فقط من بانکم توی خود برنامه هست و به صورت experess هست و توی C# ساختمش

danialafshari
سه شنبه 03 بهمن 1391, 01:38 صبح
بفرمائید:
ریستور رو هنوز وقت نکردم ولی این بک آپ:
SQL Server 2005

vapa_71
سه شنبه 03 بهمن 1391, 15:12 عصر
داداش برنامه رو وقتی توی یک سیستم دیگه اجرا میکنم این ارور رو میده

danialafshari
سه شنبه 03 بهمن 1391, 16:19 عصر
دیتابیس رو attach کردی؟

vapa_71
سه شنبه 03 بهمن 1391, 17:14 عصر
نه من همونطور که ساخته شده فقط پوشه برنامه رو ریختم توی یک سیستم دیگه و اونجا تست کردم
توی سیستم خودم خوبه اما توی یک سیستم دیگه ابنو نشون میده

vapa_71
سه شنبه 03 بهمن 1391, 17:17 عصر
این کل برنامه است اگه میشه لطف کنین و علتشو بهم بگین

danialafshari
سه شنبه 03 بهمن 1391, 18:58 عصر
سلام
من sql 2005 نصبه و attach نمیشه فکر می کنم اگر شما در اون سیستم در management دیتابیس رو attach کنید دیگه مشکلی پیش نیاد

vapa_71
سه شنبه 03 بهمن 1391, 22:45 عصر
من دیتابیس رو داخل خود C# ساختم چطوری باید attach کنم ؟

danialafshari
سه شنبه 03 بهمن 1391, 22:56 عصر
sql management رو باید سر سیستم مقابل نصب کنی و سرویس

vapa_71
سه شنبه 03 بهمن 1391, 23:00 عصر
روی اون سیستم هم همون sql و ویژوال استدیو نصبه ها ؟ لازمه اسکیوال جدا نصب کنم ؟

vapa_71
سه شنبه 03 بهمن 1391, 23:38 عصر
فایل بکاپ ایجاد میشه اگه continue رو بزنی اما نمیدونم فایل بکاپش درسته یا نه

vapa_71
چهارشنبه 04 بهمن 1391, 00:36 صبح
اینم ارور توی برنامه :ناراحت:

http://s3.picofile.com/file/7630053759/errorrep.jpg

hosseinzamani13677
چهارشنبه 04 بهمن 1391, 11:22 صبح
من همیشه به شکل زیر Backup میگیرم مشکلیم ندارم، ببین شاید بدردت بخوره
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Backup File|*.bak";
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
btnBackup.Enabled = false;
this.Cursor = Cursors.WaitCursor;
string strBackupCommand = "USE MASTER BACKUP DATABASE [نام دیتابیس] TO DISK = N'" + saveFileDialog1.FileName + "' WITH NOFORMAT, NOINIT, " +
"NAME = N'" + saveFileDialog1.FileName + "-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
SettingClass.Backup(strBackupCommand);
MessageBox.Show("پشتیبان گیری با موفقیت صورت گرفت", "کاربر گرامی");
btnBackup.Enabled = true;
this.Cursor = Cursors.Default;
}
else
{
MessageBox.Show("نام فایلی برای پشتیبان گیری اعلام نگردید", "کاربر گرامی", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}

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();
}
}

danialafshari
چهارشنبه 04 بهمن 1391, 11:31 صبح
سلام کد درون کلاس رو نزاشتید

SettingClass.Backup(strBackupCommand);

vapa_71
چهارشنبه 04 بهمن 1391, 11:36 صبح
داداش مشکل از سیستم دومی هست چون برنامه خودتم توی سیستم دومی همین مشکل رو داره اما توی سیستم خودم هیچکدوم مشکل ندارن

vapa_71
چهارشنبه 04 بهمن 1391, 11:39 صبح
به نظرت سیستم دومی چی کم داره من همون نسخه از ویژوال و نت فرم رو روش نصب کردم

danialafshari
چهارشنبه 04 بهمن 1391, 11:41 صبح
به نظرت سیستم دومی چی کم داره من همون نسخه از ویژوال و نت فرم رو روش نصب کردم

فکر میکنم نیاز هست که Sql management , service نصب بشه و بانک attach بشه
شاید عصر یا شب تست کردم

vapa_71
چهارشنبه 04 بهمن 1391, 11:44 صبح
فکر میکنم نیاز هست که Sql management , service نصب بشه و بانک attach بشه
شاید عصر یا شب تست کردم

آخه روی سیستم خودم sql نضب نیست و اصلا با پروژه شما هم کاری نکردم و مشکلی هم نداشت
جالب اینه فایل بکاپ هم ایجاد میشه اما چون ریستور ندارم نمیشه چکش کرد

vapa_71
چهارشنبه 04 بهمن 1391, 12:47 عصر
داداش من این کد رو پیدا کردم هم بکاپش واسم کار میکنه هم ریستورش اما یک مشکل داره وقتی 1 بار بکاپ میگیره برای بار دوم فایل قبلی رو پاک نمیکنه که بکاپ جدید رو جایگزین کنه و همون بکاپ اول باقی میمونه
فایل بکاپ رو داخل خود پوشه برنامه میسازه


SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Report_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 ='" + Application.StartupPath + "\\backup.bak'";
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("database backup: ok");

vapa_71
چهارشنبه 04 بهمن 1391, 21:11 عصر
دوستان این کد بکاپ گیری یه مشکل داره کسی میتونه حلش کنه ؟
فایل بکاپ قبلی رو پاک نمیکنه که بکاپ جدید رو جایگزین کنه

danialafshari
چهارشنبه 04 بهمن 1391, 21:23 عصر
شرط براش بزار و از کلاس system.io استفاده کن می تونی قبلی رو پاک کنی !

vapa_71
چهارشنبه 04 بهمن 1391, 21:27 عصر
آدرس دهیش چطوره توی مثال شما خوب بود اما چون ریستور نداشت از این کد استفاده کردم خواستم اون شرط شما رو بذارم اما چون مسیر ذخیره سازی توی خود پوشه برنامه هست نمیدونستم چکار کنم

hosseinzamani13677
چهارشنبه 04 بهمن 1391, 22:41 عصر
کد کلاس
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();
}
}

hosseinzamani13677
چهارشنبه 04 بهمن 1391, 22:49 عصر
کد بازگرداندن فایل پشتیبان 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();
}

vapa_71
چهارشنبه 04 بهمن 1391, 23:08 عصر
دوست عزیز شما کانکشن رو چطور تعریف کردین ؟

h_m0zhdeh
جمعه 13 بهمن 1391, 09:38 صبح
با سلام
من یه کد برای 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);
}

Alfred188
جمعه 13 بهمن 1391, 10:02 صبح
درود، برای 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

}


امیدوارم کمکتون کنه
موفق باشید

veniz2008
جمعه 13 بهمن 1391, 10:04 صبح
سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19 مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
http://barnamenevis.org/showthread.php?348780-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%AA%D9%87%DB%8C%D9%87-%DA%A9%D9%BE%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D9%87-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%AA%D9%87%DB%8C%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86&highlight=backup

h_m0zhdeh
جمعه 13 بهمن 1391, 10:27 صبح
اینم تغییراتی که به کدم دادم و درست شد
امیدوارم به درد کسایی که این تاپیک رو می بینند بخوره:بوس:



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);
}