PDA

View Full Version : رفرش شدن مرتب bakup در اس کیو ال expres2008



علی فتحی
دوشنبه 27 مهر 1394, 20:22 عصر
با عرض سلام و خسته نباشید.بنده برای هر سال مالی در مسیر برنامه یک بک اپ از دیتابیس گرفتم با نام سال مربوطه ذخیره کردم هنگام استفاده با یک کمبو باکس سال مربوطه رو انتخاب میکنم .سوالم اینه چگونه بک اپ مربوطه را مرتب رفرش کنم. مثلا اگر سال مالی 1394 رو ایجاد کردم یک نمونه در مسیر برنامه بنام 1394.mdf ایجاد میکنم حالا میخواهم عملیاتی که در ذخیره دیتابیس وارد میشه مرتب در بک اپ مربوطه هم وارد بشه.
----- البته با time اینکارو کردم هر 5 دقیقه یک بک اپ بگیره ولی مشکل اینجاست بک اپ گیری کند و چند ثانیه برنامه را متوقف میکنه واین یعنی ضعف نرم افزار.
2-یک راه دیگر هم رفتم اونم کل دیتابیس رو در پوشه بانام سال گذاشتم راحت با کمبو باکس پوشه مربوطه را انتخاب و بادیتابیس کار میکنم و این وقتی کاربرد داره که دیتا بیس در مسیر برنامه باشه .فکر بالا بخاطر این به نظرم اومده میخوام دیتابیس رو لوکال کنم و قطعا این روش 2 در لوکال جواب نمیده .


try {
if (System.IO.File.Exists(Application.StartupPath + "\\Sal\\" + textBoxX1.Text + ".mdf"))
{
MessageBox.Show("این سال وجود دارد");
}
else
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|Data\\Datn.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 + "\\Sal\\" + textBoxX1.Text + ".mdf'";
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();
progressBarX1.PerformStep();
progressBarX1.Value = 0;
progressBarX1.Value = 100;
MessageBox.Show("سال مالی ایجاد شد");


}






try {


SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|Data\\Datn.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 = '" + Application.StartupPath + "\\Sal\\" + textBoxX2.Text + ".mdf';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();
progressBarX1.PerformStep();
progressBarX1.Value = 100;
progressBarX1.Value = 0;
MessageBox.Show("سال مالی انتخاب شد");

علی فتحی
دوشنبه 27 مهر 1394, 21:02 عصر
روش دوم ایرادی که داره . مورد داشتیم طرف از بانک 1389 .پشتیبان گرفته بود بعد از مدتی سال مالی 94 رو انتخاب کرده بود و ندانسته سال 89 رو بازیابی کرده بود کل اطلاعات سال 93 منصفانه پاک شده بود . وگر نه پرش از این مشکل روش خوبیه

علی فتحی
سه شنبه 28 مهر 1394, 00:46 صبح
ببخشید یک سوال دیگه؟ من فیلدی از نوع decimulدارم حالا مقدار 2/5 هکتار رو چگونه در اون ذخیره کنم..قبول نمیکنه

علی فتحی
یک شنبه 03 آبان 1394, 20:07 عصر
سلام مدیریت سایت لطفا این تاپیک رو به جایی پاس بدین خیلی ضروریه

علی فتحی
سه شنبه 13 بهمن 1394, 00:10 صبح
الووووووووووووووووووووووو و لطفا نظر بدید استادان گرامی