PDA

View Full Version : سوال: بکاپ و ریستو از بانک sqlexpress



shahab.es
دوشنبه 31 فروردین 1394, 10:58 صبح
سلام خدمت دوستان
من از بانک sql express استفاده میکنم
میخوام قابلیت بکاپ و ریستور بدم به برنامم
چند جا که نگاه کردم ، اموزش هایی که دارن برای Sql هست نه نسخه express
این کد هارو هم خودم استفاده کردم اما تو قسمت
ExecuteNonQuery(); ارور دارم





SaveFileDialog save = new SaveFileDialog();
save.FileName = DateTime.Now.ToString("ddmmyyyy_HHMMSS");
save.Filter = "Videoback(*.vbac)|*.vbac";
MessageBox.Show("پشتیبان گیری مقداری طول خواهد کشید!");
if (save.ShowDialog()==DialogResult.OK)
{


this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|datadirector y|\film_db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + Application.StartupPath + @"film_db.mdf] TO DISK ='" + save.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("پشتیبان گیری انجام شد!");


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

یا علی

محمد رضا فاتحی
دوشنبه 31 فروردین 1394, 11:49 صبح
این تابعی هست که خودم برای پشتیبان گیری ازش استفاده می کنم


public static string Backup(string strFileName)
{
SqlCommand scom1 = new SqlCommand();
SqlConnection.ClearAllPools();
SqlConnection con = new SqlConnection(constr);
scom1.Connection = con;
scom1.Connection.Open();
string dbname = scom1.Connection.Database;
scom1.Connection.Close();
SqlConnection sc = data.conect();
SqlCommand scom = new SqlCommand("BACKUP DATABASE [" + dbname + "] TO DISK ='" + strFileName + "'", sc);
try
{
sc.Open();
scom.ExecuteNonQuery();
sc.Close();
return "پشتیبان گیری از اطلاعات با موفقیت انجام گرفت";


}
catch (Exception ex)
{
}
}

pouria_bayat
دوشنبه 31 فروردین 1394, 12:00 عصر
برای SQLEXpress :



string sqlSErverInstance = ".\\SqlExpress";
conn = new ServerConnection();
conn.ServerInstance = sqlSErverInstance;
srv = new Server(conn);
//
Backup bkp = new Backup();

this.Cursor = Cursors.WaitCursor;
try
{
string fileName = txtPath.Text;
string databaseName = "DB.mdf";

bkp.Action = BackupActionType.Database;
bkp.Database = databaseName;
bkp.Devices.AddDevice(fileName, DeviceType.File);
// bkp.Incremental = chkIncremental.Checked;


bkp.PercentCompleteNotification = 10;
bkp.PercentComplete += new PercentCompleteEventHandler(ProgressEventHandler);

bkp.SqlBackup(srv);
MessageBox.Show("پشتیبان گیری با موفقیت به پایان رسید.");
}
catch (Exception ex)
{
MessageBox.Show("عملیات پشتیبان گیری با خطا مواجه شده است");
MessageBox.Show(ex.ToString());
}

shahab.es
دوشنبه 31 فروردین 1394, 13:00 عصر
ممنون از هر دو دوستان
من هر کدوم رو که وارد میکنم، سینتکس ارور دارم
از طرفی، با این کد هایی که شما دوستان زحمت کشیدید، ایا میشه که کاربر محل ذخیره بکاپ رو مشخص کنه؟

shahab.es
دوشنبه 31 فروردین 1394, 21:03 عصر
دوستان در مورد ریستور هم اگه میشه توضیح بدید
در ضمن مشکل بنده هنوز به شکل کامل رفع نشده
ممنون از تمامی اساتید

محمد رضا فاتحی
سه شنبه 01 اردیبهشت 1394, 08:16 صبح
این از تابع backup
دوتا پارامتر میگیره اولیش محل ذخیر سازیه که می تونی از کاربر بگیری و دومیش کانکشن به پایگاه داده
public bool Backup(string strFileName,SqlConnection con) {
SqlCommand scom1 = new SqlCommand();
SqlConnection.ClearAllPools();
scom1.Connection = con;
scom1.Connection.Open();
string dbname = scom1.Connection.Database;
scom1.Connection.Close();

SqlCommand scom = new SqlCommand("BACKUP DATABASE [" + dbname + "] TO DISK ='" + strFileName + "'", con);
try
{
con.Open();
scom.ExecuteNonQuery();
con.Close();
return true;




}
catch (Exception ex)
{
return false;
}
}

اینم از تابع restore

public bool Restore(string DatabaseFullPath, string backUpPath,SqlConnection con) {

try
{



con.Open();


string UseMaster = "USE master";
SqlCommand UseMasterCommand = new SqlCommand(UseMaster, con);


UseMasterCommand.ExecuteNonQuery();


string Alter1 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, con);
Alter1Cmd.ExecuteNonQuery();


string Restore = @"RESTORE DATABASE [" + DatabaseFullPath + "] FROM DISK = N'" + backUpPath + @"' WITH FILE = 1, NOUNLOAD,REPLACE, STATS = 10";
SqlCommand RestoreCmd = new SqlCommand(Restore, con);
RestoreCmd.ExecuteNonQuery();


string Alter2 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, con);
Alter2Cmd.ExecuteNonQuery();
con.Close();


return true;
}
catch
{
con.Close();
return false;
}


}
پارامتر اول مسیر کامل فایل دیتابیس مثلا اگه دیتابیست کنار برنامه هست باید پارامتر اول به این شکل باشه
Application.StartupPath + "\\db.mdf"

MehdiElexal
چهارشنبه 03 تیر 1394, 14:38 عصر
این از تابع backup
دوتا پارامتر میگیره اولیش محل ذخیر سازیه که می تونی از کاربر بگیری و دومیش کانکشن به پایگاه داده
public bool Backup(string strFileName,SqlConnection con) {
SqlCommand scom1 = new SqlCommand();
SqlConnection.ClearAllPools();
scom1.Connection = con;
scom1.Connection.Open();
string dbname = scom1.Connection.Database;
scom1.Connection.Close();

SqlCommand scom = new SqlCommand("BACKUP DATABASE [" + dbname + "] TO DISK ='" + strFileName + "'", con);
try
{
con.Open();
scom.ExecuteNonQuery();
con.Close();
return true;




}
catch (Exception ex)
{
return false;
}
}

اینم از تابع restore

public bool Restore(string DatabaseFullPath, string backUpPath,SqlConnection con) {

try
{



con.Open();


string UseMaster = "USE master";
SqlCommand UseMasterCommand = new SqlCommand(UseMaster, con);


UseMasterCommand.ExecuteNonQuery();


string Alter1 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, con);
Alter1Cmd.ExecuteNonQuery();


string Restore = @"RESTORE DATABASE [" + DatabaseFullPath + "] FROM DISK = N'" + backUpPath + @"' WITH FILE = 1, NOUNLOAD,REPLACE, STATS = 10";
SqlCommand RestoreCmd = new SqlCommand(Restore, con);
RestoreCmd.ExecuteNonQuery();


string Alter2 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, con);
Alter2Cmd.ExecuteNonQuery();
con.Close();


return true;
}
catch
{
con.Close();
return false;
}


}
پارامتر اول مسیر کامل فایل دیتابیس مثلا اگه دیتابیست کنار برنامه هست باید پارامتر اول به این شکل باشه
Application.StartupPath + "\\db.mdf"
با سلام ، این با SQL Server سازگار هست ؟
برای بنده خطا میده

backup on raw devices are not supported. 'C:\\' is raw device.

BACKUP DATABASE is terminating abnormally.


تشکر