PDA

View Full Version : مبتدی: بکاپ گیری به صورت مستقل از SMO



cmsdqq2
پنج شنبه 19 اسفند 1395, 15:56 عصر
با عرض سلام

بنده از ابزار SQL Server 2012 Express LocalDB جهت ایجاد دیتابیس ها به صورت لوکال استفاده می کنم. مسئله ای در خصوص بکاپ گیری برای بنده پیش آمده. در هنگام بکاپ گیری به دلیل اینکه بنده از sql server management studio استفاده نمی کنم بلکه از خود Visual Studio 2013 جهت اتصال به بانک بهره می برم، با پیغام های خطای زیادی روبرو می شوم.



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

نمی توان اتچ کرد
و...


کدهای محتلفی را تست کرده ام اما باز هم به نتیجه نرسیده ام. یکی از کدها به صورت زیر است:

string path = Application.StartupPath + "\\db.mdf";
string command = @"BACKUP DATABASE [" + path + "] TO DISK ='C:\\db.mdf'";
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
con.ConnectionString = DA.strconnection;
if (con.State != ConnectionState.Open)
con.Open();

cmd.Connection = con;
cmd.CommandText = command;
cmd.ExecuteNonQuery();
تمامی موارد من جمله کانکشن استرینگ و ... صحیح هستند اما متاسفانه باز هم خطا می دهد. بنده احساس میکنم به دلیل عدم نصب SSM یا یک SQL Server کامل باشد.

cmsdqq2
دوشنبه 23 اسفند 1395, 21:31 عصر
بنده پس از جستجوهای فراوان راه حل را پیدا کردم. امید که ارائه ی این راه حل موجب حل این مسئله برای دیگر دوستان شود.

اگر از SQL Server 2012 Express LocalDB استفاده می کنید و دیتابیس در Visual Studio (نسخه 2013) بخش Server Explorer می باشد، جهت بکاپ گیری دیتابیس میتوانید کد زیر را استفاده نمایید.

توجه: قرار دادن دیتابیس در فولدر فایل اجرایی برنامه، عملی ناصحیح است و بهتر است دیتابیس در App_Date قرار گیرد.
نکته: کد فوق از سایت Stack overflow برداشته شده است. لینک صفحه: لینک صفحه وب سایت Stackoverflow (http://stackoverflow.com/questions/16746664/how-to-create-database-backup-when-db-not-stored-in-microsoft-sql-server)
SaveFileDialog sd =new SaveFileDialog();
sd.Filter="SQL Server database backup files|*.bak";
sd.Title="Create Database Backup";

if(sd.ShowDialog()==DialogResult.OK)
{
using(SqlConnection conn =newSqlConnection(ConfigurationManager.ConnectionS trings["project_name.Properties.Settings.project‌​_nam eConnectionString"].ConnectionString))
{
string sqlStmt =string.Format("backup database ["+System.Windows.Forms.Application.StartupPath+"\\dbname.mdf] to disk='{0}'",sd.FileName);
using(SqlCommand bu2 =new SqlCommand(sqlStmt, conn))
{
conn.Open();
bu2.ExecuteNonQuery();
conn.Close();

MessageBox.Show("Backup Created Sucessfully");
}
}
}
کد زیر هم اتصال دیتابیس شما را به صورت پیش فرض از App_Date پی میگیرد.




AppDomain.CurrentDomain.SetData("DataDirectory",
Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData));






کانکشن استرینگ:




@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\dbname.mdf;Initial Catalog=Database;Asynchronous Processing=true;Integrated Security=True;Connect Timeout=30"





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

با آرزوی موفقیت و التماس دعا

cmsdqq2
دوشنبه 23 اسفند 1395, 23:17 عصر
بنده پس از جستجوهای فراوان راه حل را پیدا کردم. امید که ارائه ی این راه حل موجب حل این مسئله برای دیگر دوستان شود.

اگر از SQL Server 2012 Express LocalDB استفاده می کنید و دیتابیس در Visual Studio (نسخه 2013) بخش Server Explorer می باشد، جهت بکاپ گیری دیتابیس میتوانید کد زیر را استفاده نمایید.

توجه: قرار دادن دیتابیس در فولدر فایل اجرایی برنامه، عملی ناصحیح است و بهتر است دیتابیس در App_Date قرار گیرد.
نکته: کد فوق از سایت Stack overflow برداشته شده است. لینک صفحه: لینک صفحه وب سایت Stackoverflow (http://stackoverflow.com/questions/16746664/how-to-create-database-backup-when-db-not-stored-in-microsoft-sql-server)
SaveFileDialog sd =new SaveFileDialog();
sd.Filter="SQL Server database backup files|*.bak";
sd.Title="Create Database Backup";

if(sd.ShowDialog()==DialogResult.OK)
{
using(SqlConnection conn =newSqlConnection(ConfigurationManager.ConnectionS trings["project_name.Properties.Settings.project‌​_nam eConnectionString"].ConnectionString))
{
string sqlStmt =string.Format("backup database ["+System.Windows.Forms.Application.StartupPath+"\\dbname.mdf] to disk='{0}'",sd.FileName);
using(SqlCommand bu2 =new SqlCommand(sqlStmt, conn))
{
conn.Open();
bu2.ExecuteNonQuery();
conn.Close();

MessageBox.Show("Backup Created Sucessfully");
}
}
}
کد زیر هم اتصال دیتابیس شما را به صورت پیش فرض از App_Date پی میگیرد.




AppDomain.CurrentDomain.SetData("DataDirectory",
Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData));






کانکشن استرینگ:




@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\dbname.mdf;Initial Catalog=Database;Asynchronous Processing=true;Integrated Security=True;Connect Timeout=30"





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

با آرزوی موفقیت و التماس دعا



اگر کمبود وقت دارید و یا تمایلی به روبرو شدن با خطاهای احتمال ندارید، مثال زیر را حتماً مشاهده نمایید.


تابع بکاپ



private void backup(string str_sfdfilename)
{
AppDomain.CurrentDomain.SetData(Application.Startu pPath,
Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData));
string path = Application.StartupPath + "\\dbname.mdf";
string command = @"BACKUP DATABASE [" + path + "] TO DISK ='" + str_sfdfilename + "'";
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
con.ConnectionString = "(کانکشن استرینگ در اینجا)";
if (con.State != ConnectionState.Open)
con.Open();


cmd.Connection = con;
cmd.CommandText = command;
cmd.ExecuteNonQuery();
}





کد زیر را نیز در باتن قرار دهید:



DateTime cDateTime = DateTime.Now;
PersianCalendar pC = new PersianCalendar();
int persianMonth = pC.GetMonth(cDateTime);
int persianDay = pC.GetDayOfMonth(cDateTime);
int persianYear = pC.GetYear(cDateTime);
string date = string.Format("{0:D2}/{1:D2}/{2:D2}", persianYear, persianMonth, persianDay);


SaveFileDialog SFD = new SaveFileDialog();
string str_sfdfilename = string.Empty;
SFD.FileName = "Backup DB_" + date.ToString().Replace("/", "_");
SFD.Title = "Save Backup";
SFD.DefaultExt = "mdf";
SFD.Filter = @"Database(*.mdf)|*.mdf|All Files(*.*)|*.*";


if (SFD.ShowDialog() == DialogResult.OK)
{
str_sfdfilename = SFD.FileName;
backup(str_sfdfilename);
MessageBox.Show("انجام شد", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = SFD.FileName;
}


نکته: تاریخ به صورت شمسی درج خواهد شد.

soleimani.em
پنج شنبه 02 فروردین 1397, 19:45 عصر
سلام منم همین مشکلو دارم

خطای : dditional information: Incorrect syntax near '\'.