سلام به تمامي دوستان عزيز و گرامي
من يه برنامه با سي شارپ نوشتم كه ديتا بيسش sql2005 هست .
تو سايت هر چقدر جستجو كردم نتونستم كد هاي مربوط به اتچ و بكاپ و ريستور را پيدا كنم
لطفا كد هاي مربوطه را بنويسيد چون تا به حال بكاپ ورنداشتم
سلام به تمامي دوستان عزيز و گرامي
من يه برنامه با سي شارپ نوشتم كه ديتا بيسش sql2005 هست .
تو سايت هر چقدر جستجو كردم نتونستم كد هاي مربوط به اتچ و بكاپ و ريستور را پيدا كنم
لطفا كد هاي مربوطه را بنويسيد چون تا به حال بكاپ ورنداشتم
کاربر محترم همین دیروز یکی از کاربر ها در خواست کرد و یکی یک سورس توپ گذاشت حالا اگه اتچ و دی اتچ را می خواهی بگو تا بگم اما ریستور را نمی دونم !!!
SqlCommand com = newSqlCommand("backup database ChestRenal to disk= "
+ "'" + textBox1.Text.ToString() + "'" , sc);
این کد رو توی همین سایت پیدا کردم!!
private void Attach_db(string db_Name, string Path_Mdf, string Path_Ldf)
{
try
{
SqlConnection con = new SqlConnection("server=.;trusted_connection=yes;");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "sp_attach_db @dbname = N'" + db_name + "', @filename1 = N'" + Path_Mdf + "', @filename2 = N'" + Path_Ldf + "'";
cmd.CommandType = CommandType.Text;
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
MessageBox.Show(e);
}
}
این کد اتچ را تست کردم بسیار عالی بود . خیلی خوب جواب داد
لطفا در مورد بکاپ و ریستور هم راهنمایی کنید
من از کدهای زیر استفاده می کنم .
string filename;
private void Backup_Click(object sender, EventArgs e)
{
saveFileDialog1.FileName = "DB_Backup" + PersianDate.Now.Year.ToString() + '-' + PersianDate.Now.Month.ToString() + '-' + PersianDate.Now.Day.ToString() + ".bak";
saveFileDialog1.Filter = "Backup Files (*.bak)|*.bak | All Files (*.*)|*.*";
this.saveFileDialog1.ShowDialog();
if ((this.saveFileDialog1.FileName != ""))
{
filename = saveFileDialog1.FileName.ToString();
}
try
{
con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=ExamA;Integrated Security=True";
cmd.Connection = con;
string t = @"BACKUP DATABASE [ExamA]TO DISK=N'" + filename + "' WITH NOFORMAT,NOINIT,NAME=N'mydb-full Database Backup',SKIP,NOREWIND,NOUNLOAD,STATS=10;";
cmd.CommandText = t;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("پشتیبان گیری با موفقیت انجام شد");
}
catch
{
MessageBox.Show("پشتیبان گیری با موفقیت انجام نشد");
}
}
private void Restore_Click(object sender, EventArgs e)
{
this.openFileDialog1.ShowDialog();
if ((this.openFileDialog1.FileName != "") && (this.openFileDialog1.FileName != "openFileDialog1"))
{
try
{
filename = openFileDialog1.FileName;
con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=ExamA;Integrated Security=True";
cmd.Connection = con;
con.Open();
cmd.CommandText = "ALTER DATABASE ExamA SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE ExamA FROM DISK =N'" + filename + "'";
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد");
}
catch
{
MessageBox.Show("بازیابی با موفقیت انجام نشد");
}
}
}
معمولا روال هم بر این قراره که فایلهای بانک رو توی یه پوشه مشترک با فایلهای برنامه میریزن بعد توی لود برنامه دستورات اتچ رو مینویسن(اگر قبلا اتچ نشده باشه!) برای دسترسی به پوشه برنامه هم میتونی از کد زیر استفاده کنیمسیر فایلهای mdf و ldf را چه طور باید قرار بدیم ؟؟
همون مسیری که توی برنامه خودت توی کد گذاشتی را می تونی بزاری اینجا .
System.IO.Path.GetDirectoryName(Application.Execut ablePath)
من براي بكاپ از كد زير استفاده مي كنم . كه در اولين اجرا بكاپ ور داشت . ولي ديگه ور نمي داره و اين ارور را ميده
Cannot open database "kdb" requested by the login. The login failed.
Login failed for user 'PROGRAMMER\yashar'.
كد هاي بكاپ
privatevoid button20_Click(object sender, EventArgs e)
{
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackFile";
saveFileDialog1.Filter = "Create BackUp (*.bak)|*.bak|All file(*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
back(strFileName);
}
}
privatevoid back(string strFileName)
{
try
{
string command = @"BACKUP DATABASE kdb TO DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = newSqlConnection("Data Source=.; initial catalog=kdb ;integrated security=true;");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = newSqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("پ¬¢ï ںëï ں êيهçï¢ ںë¤ںê ¬§");
}
catch (Exception ex)
{
//MessageBox.Show("ERROR Occurd: " + ex.Message);
textBox26.Text = ex.Message.ToString();
}
}
ك هاي restore هم به اين شكل هست
privatevoid button23_Click(object sender, EventArgs e)
{
string strFileName = string.Empty;
openFileDialog1.FileName = " ";
openFileDialog1.Filter = "Restore BackUp (*.bak)|*.bak|All file(*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restor SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
rest(strFileName);
}
}
privatevoid rest(string strFileName)
{
try
{
string command = "ALTER DATABASE kdb SET SINGLE_USER with ROLLBACK IMMEDIATE " +
"use master " +
" RESTORE DATABASE kdb FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = newSqlConnection("Data Source=.; initial catalog=kdb ;integrated security=true;");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = newSqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("پ¬¢ï ںë ں êيهçï¢ ںھ詧ںë§ى ¬§");
}
catch (Exception ex)
{
MessageBox.Show("ERROR Occurd: " + ex.Message);
}
}
ارور بالا هم ميگه با يوزر programmer نمي تونم لاگين بشم . كه حرف چرتي زده
و يوزر و پس ميخواد كه چون لاين به صورت Windows Authentication هست اين ارور بي معني هست
SqlConnection sc = new SqlConnection("Data Source=sama;Initial Catalog=ChestRenal;Integrated Security=True");
sc.Open();
SqlCommand com = newSqlCommand("backup database ChestRenal to disk= "
+ "'" + textBox1.Text.ToString() + "'" , sc);
com.ExecuteNonQuery();
sc.Close();
MessageBox.Show("نسخه پشتيبان تهيه شد.");
من هم وقتی از این کدها استفاده می کنم بعد از چند بار بکاپ گیری و رستور موفق همون ارور را میده .
مشکل از اینجاست که این دستورات اون دیتابیس را به Single User تغییر میدن .
اگه sql sarver را باز کنید و توی دیتابیس ها به دیتابیس kdb نگاه کنید می بینید که اونا تغییر داده به Single User . و به شما اجازه وارد شدن به اون را نمیده .
به خاطر همین برنامه قادر نیست توی این دیتابیس چیزی بنویسه یا چیزی ازش بخونه .
دلیل این مشکل چیه ؟
فکر کنم مشکل حل شد .
شما هم امتحان کن ببین حل شده .
فقط کافیه بعد از oCommand.ExecuteNonQuery(); کانکشن را ببندید .
oConnection.Close();
یکی از دوستان لطف کنه یه کد درست بذاره ممنون میشم ، هیچ کدوم برای backup جواب نمیدن ...
مشكل اتچ به كل رفع شد
مشكل بكاپ را هم حل كردم
فقط مونده ريستور :
كد هاي بكاپ را اگر به اين شكل بنويسيد هميشه جواب ميده
private void button20_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup";
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = "C:\\";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection();
sqlConnection.ConnectionString = "server=(local);database=kdb;integrated security=true;";
sqlConnection.Open();
System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "BACKUP DATABASE kdb TO DISK = @Destination";
sqlCommand.Parameters.Add("@Destination", SqlDbType.VarChar);
sqlCommand.Parameters["@Destination"].Value = saveFileDialog.FileName;
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
}
}با اين كد ها موفق به گرفتن بكاپ شدم . هميشه هم جواب ميده
ولي ريستور هنوز مشكل هست ( يه كد هايي پيدا كردم كه با يه متد ديگه اي به غير كد هايي كه تا حالا نوشته شده ، دارم تغييراتي روش اعمال مي كنم كه بشه تو پروژه ها ازش استفاده كرد . اگر جواب گرفتم كد ها را همينجا ميزارم ) دوستان اي كه تجربه ريستور را دارن لطفا كمك كنيد
با تشكر از همه دوستان عزيز
دوستان اين كد هاي ريستور هست كه من از يه سورس اي تو اينترنت پيدا كردم . نمي دونم چرا داخل سورس اي كه از اينترنت دانلود كردم جواب ميده اما در پروژه من جواب نميده
شما هم تست كنيد نتيجه را بگين
using System.Data.Sql;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
//add this References :
//Microsoft.SqlServer.ConnectionInfo
//Microsoft.SqlServer.Smo
private void button23_Click(object sender, EventArgs e)
{
ServerConnection srvConn = new ServerConnection("(local)");
srvConn.LoginSecure = true;
srvSql = new Server(srvConn);
// If there was a SQL connection created
if (srvSql != null)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog1.DefaultExt = "Bak";
Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "kdb";
BackupDeviceItem bkpDevice = new BackupDeviceItem(openFileDialog1.FileName, DeviceType.File);
rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
rstDatabase.SqlRestore(srvSql);
MessageBox.Show("Restore Success");
}
}
else
{
MessageBox.Show("A connection to a SQL server was not established.", "Not Connected to Server", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
کد BACKUP که گذاشتید برای sQL 2000 هم میشه استفاده کنم؟
به Reference های برنامه ای که گرفتی یه نگاه بنداز ببین چه Reference هایی رو اضافه کرده که شما ندارید.دوستان اين كد هاي ريستور هست كه من از يه سورس اي تو اينترنت پيدا كردم . نمي دونم چرا داخل سورس اي كه از اينترنت دانلود كردم جواب ميده اما در پروژه من جواب نميده
شما هم تست كنيد نتيجه را بگين
شما فقط فضای نامهای (using) استفاده شده رو نوشتید. منظور من این بود که توی پنجراه Solution گزینه References رو باز کنید ببینید چه گزینه هایی هست که توی پروژه خودتون نیست.در بالاي كد ها نوشتم چه رفرنس هايي را اضافه كرده
شما اين كد هاي ريستور را امتحان كردين ؟؟؟
برای استفاده از Smo باید رفرنس های microsoft.sqlsarver.smo وmicrosoft.sqlsarver.connectioninfo را به پروژه اضافه کنی .
سلام دوستان. . .
من از توی همین سایت کد backup و restor را برداشتم کد Bachup کار کرد ولی کد restor کار نکرد .
نام DB من dbhakimshafae است من از کد زیر برای restor استفاده می کنم.
راستی وقتی که از توی خود نرم افزار sql من restor میکنم فایل backup را restor می کنه ولی کد زیر به من جواب نمیده. . . اگه میشه بگین اشکال کار چیه ؟؟؟
ممنون . .
this.openFileDialog1.ShowDialog();
if ((this.openFileDialog1.FileName != "") && (this.openFileDialog1.FileName != "openFileDialog1"))
{
try
{
SqlCommand cmd1 = new SqlCommand();
filename = openFileDialog1.FileName;
con.ConnectionString = "Data Source=(local);Initial Catalog=dbhakimshafae;Integrated Security=True";
cmd1.Connection = con;
con.Open();
cmd1.CommandText = "ALTER DATABASE dbhakimshafae SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE dbhakimshafae FROM DISK =N'" + filename + "'";
cmd1.Connection = con;
cmd1.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازيابي با موفقيت انجام شد");
}
catch
{
MessageBox.Show("بازيابي با موفقيت انجام نشد");
}
}
دوستان ميشه يك نمونه كامل بزاريد تحت #C
از همه شما دوستان ممنونم که برای اتچ کردن و بکآپ گرفتن کمک کردید اما همچنان مشکل restore حل نشده لطفا این مورد رو هم کمک کنید.
salam manam alan test kardam va ghablan ham test kardeh bodam ama ba error(Restore failed for Server 'GDSCS-PC'.) movajeh misham kasi javabesho midoneh
baraye back up in javab mideh
man hamisheh azash estefadeh mikonam ama restor moshkel darem
private void back(string strFileName)
{
try
{
string command = "BACKUP DATABASE DB_Gold 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 = Mahdi_Conection.Sql.ConectionString;
//"Data Source=.;Initial Catalog=DB_World_Water_Settle;Integrated Security=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("تهيه نسخه پشتيبان از اطلاعات با موفقيت انجام شد", "پشتیبانی");
Mahdi_Conection.Sql.Disconection();
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Mahdi_Conection.Sql.Disconection();
}
}
private void btnBackup_Click(object sender, EventArgs e)
{
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackFile";
saveFileDialog1.Filter = "Create BackUp (*.bak)|*.bak|All file(*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
back(strFileName);
}
}
dostan bara restor kasi code soragh ndareh!!!!!!!!!!!!!!!!!!!
mamnon misham age rahnamei konid