PDA

View Full Version : ایجاد progressbar و انتخاب مسیر پشتیبان گیری برای پروژه



Habib216
سه شنبه 25 مهر 1396, 01:08 صبح
با سلام
بنده میخوام برای پروژه خودم برای قسمت پشتیبان گیری یه دکمه برای انتخاب مسیر پشتیبان گیری و یه تکست باکس برای نشون دادن مسیری که برای پشتیبان گیری انتخاب کردیم (عکس ضمیمه هست) و هم چنین یه پروگسس بار در نظر بگیرم که هم درصد پیشرفت کار رو (بصورت 0% تا 100%) نشون بده و هم اون خط سبز پروگسس بار پر بشه و بلافاصله بعد از رسیدن به 100% و پر شدن خط پروگسس بار یه پنجره باز بشه و پیغام پشتبان گیری با موفقیت انجام شد رو نمایش بده. من الان خودم پشتیبان گیری ساده رو رو بدون نمایش درصد و پروگسس بار و همچنین بدون تکست باکس مسیر انتخاب شده انجام میدم که کدشو پایین میذارم . لطفا اصلاحات رو دوستان استاد بهم بفرمایند. ممنون از شما. در ضمن اسم لیبل نمایش درصد lblPercent و اسم پروگسس بار progressBarX1 است.
این کد برای رویداد لود فرم:
private void Backup(string filename)
{
SqlConnection con = null;
try
{
string Backup = @"Backup DataBase [NameDatabase] To Disk='" + filename + "'";
SqlCommand cmd = null;
con = new SqlConnection("Data Source=.;Initial Catalog=NameDatabase;Integrated Security=True");
con.Open();
cmd = new SqlCommand(Backup, con);
cmd.ExecuteNonQuery();
MessageBox.Show("پشتیبان گیری اطلاعات با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error : " + ex.Message);
}
finally
{
con.Close();
}
}

کد مربوط به دکمه پشتبان گیری:



private void btnBackUp_Click(object sender, EventArgs e)
{
SaveFileDialog SaveBackUp = new SaveFileDialog();
string filename = string.Empty;
SaveBackUp.OverwritePrompt = true;
SaveBackUp.Filter = @"SQL Backup Files ALL Files (*.*) |*.*| (*.Bak)|*.Bak";
SaveBackUp.DefaultExt = "Bak";
SaveBackUp.FilterIndex = 1;
SaveBackUp.FileName = DateTime.Now.ToString("dd-MM-yyyy_HH-mm-ss");
SaveBackUp.Title = "Backup SQL File";
if (SaveBackUp.ShowDialog() == DialogResult.OK)
{
filename = SaveBackUp.FileName;
Backup(filename);
}
}

danialafshari
چهارشنبه 26 مهر 1396, 03:01 صبح
با سلام
قبلاً در سایت مطرح شده
کار با progressbar و یا background worker رو جستجو کنید
موفق باشید

danialafshari
چهارشنبه 26 مهر 1396, 03:56 صبح
این رو سریع نوشتم
تستش کنید ببینید بدردتون میخوره؟
موفق باشید

محمد رضا فاتحی
جمعه 28 مهر 1396, 19:41 عصر
با اجازه از آقای افشاری
این کد رو امتحان کنید


public void BackupDatabase(SqlConnection con, string databaseName, string backupName, string backupDescription, string backupFilename) {
con.FireInfoMessageEventOnUserErrors = true;
con.InfoMessage += OnInfoMessage;
con.Open();
using(var cmd = new SqlCommand(string.Format(
"backup database {0} to disk = {1} with description = {2}, name = {3}, stats = 1",
QuoteIdentifier(databaseName),
QuoteString(backupFilename),
QuoteString(backupDescription),
QuoteString(backupName)), con)) {
cmd.ExecuteNonQuery();
}
con.Close();
con.InfoMessage -= OnInfoMessage;
con.FireInfoMessageEventOnUserErrors = false;
}


private void OnInfoMessage(object sender, SqlInfoMessageEventArgs e) {
foreach(SqlError info in e.Errors) {
if(info.Class > 10) {
// TODO: treat this as a genuine error
} else {
// TODO: treat this as a progress message
}
}
}


private string QuoteIdentifier(string name) {
return "[" + name.Replace("]", "]]") + "]";
}


private string QuoteString(string text) {
return "'" + text.Replace("'", "''") + "'";
}

samiasoft
یک شنبه 07 آبان 1396, 03:20 صبح
دستوراتی که دوستمون در پست اول قرار دادند رو من امتحان کردم به درستی بکاپ میگرفت اما چرا وقتی محل ذخیره بکاپ رو دسکتاپ انتخاب میکنیم خطای نبود دسترسی میده؟ من حتی دسترسی ادمین به برنامم دادم اما حل نشد!
http://s8.picofile.com/file/8310322800/2017_10_29_154849.jpg


با سورسی هم که جناب افشاری قرار دادند من خواستم از دیتابیسم بکاپ بگیرم با خطای زیر روبرو شدم :
ناگفته نماند در سورس دیتا سورس بصورت .\SQLEXPRESS بود اما در برنامه من اونو . فقط قرار دادم

http://s8.picofile.com/file/8310322842/2017_10_29_155118.jpg

در کل فرق Data Source=.\SQLEXPRESS با Data Source=. در چیه؟

danialafshari
یک شنبه 07 آبان 1396, 04:06 صبح
با سلام
. یا (Local) به معنای محلی است
برای Sql Server تجاری از Data Source=. یا Data Source=(local) و برای نسخه اکسپرس یا رایگان از Data Source=.\SQLEXPRESS استفاده می کنند
اطلاعات بیشتر:
https://www.connectionstrings.com/sql-server/
کد من مشکلی نداره و بخوبی کار میکنه فقط نکاتی که باید رعایت کنید این هست که Data Source رو بدرستی تنظیم کنید و کانکشن رو به صورت AttachDbFilename و بانک رو از Sql Server Management دیتچ Detach کرده و در مسیر برنامه هر دو فایل mdf و ldf کپی کنید و نام دیتابیس هم همانند سورس در کانکشن قرار بدید
موفق باشید

samiasoft
دوشنبه 08 آبان 1396, 21:50 عصر
تشکر از شما ولی چرا وقتی محل ذخیره بکاپ رو دسکتاپ انتخاب میکنم خطای زیر رخ میده !
http://s8.picofile.com/file/8310322800/2017_10_29_154849.jpg

اما وقتی سایر درایوهارو انتخاب میکنم به راحتی ذخیره میشود....

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

NasimBamdad
سه شنبه 09 آبان 1396, 08:30 صبح
تشکر از شما ولی چرا وقتی محل ذخیره بکاپ رو دسکتاپ انتخاب میکنم خطای زیر رخ میده !
http://s8.picofile.com/file/8310322800/2017_10_29_154849.jpg

اما وقتی سایر درایوهارو انتخاب میکنم به راحتی ذخیره میشود....

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

درایو C و پوشه Desktop این مشکل رو داره . منم مشکل شما رو دارم

mz6488
سه شنبه 09 آبان 1396, 11:00 صبح
سلام.وقتی تو درایو c بک آپ میفرستید پیش فرض این خطا رو میده مگه اینکه عملیات زیر رو انجام بدید
برید تو قسمت services,msc و sqlExpress یا MSSqlserver رو پیدا کنید و دابل کلیک بزنید.تو تب log on دو تا گزینه اول رو انتخاب کنید و اوکی رو بزنید.بعد سرور sql رو رستارت بزنید

samiasoft
سه شنبه 09 آبان 1396, 15:38 عصر
سلام.وقتی تو درایو c بک آپ میفرستید پیش فرض این خطا رو میده مگه اینکه عملیات زیر رو انجام بدید
برید تو قسمت services,msc و sqlExpress یا MSSqlserver رو پیدا کنید و دابل کلیک بزنید.تو تب log on دو تا گزینه اول رو انتخاب کنید و اوکی رو بزنید.بعد سرور sql رو رستارت بزنید

این کاری که گفتید عین همان کاری هست که روی پوشه پروژه کلیک راست کنیم و در تب security یوزر everyone رو اضافه کنیم وکلیه مجوزها رو بهش بدیم....


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

mz6488
سه شنبه 09 آبان 1396, 16:55 عصر
این کاری که گفتید عین همان کاری هست که روی پوشه پروژه کلیک راست کنیم و در تب security یوزر everyone رو اضافه کنیم وکلیه مجوزها رو بهش بدیم....


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

ConnectionOptions coOptions = new ConnectionOptions();
coOptions.Impersonation = ImpersonationLevel.Impersonate;
ManagementScope mgmtScope = new ManagementScope(@"root\CIMV2", coOptions);
mgmtScope.Connect();
ManagementObject wmiService;
wmiService = new ManagementObject("Win32_Service.Name='MSSQL$SQLEXPRESS'");


ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");
InParam["DesktopInteract"] = true;
ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);
wmiService.Dispose();

samiasoft
سه شنبه 09 آبان 1396, 18:39 عصر
اتفاقا این کاری که گفتم یه جورایی فرق میکنه با اون تنطیم سکوریتی.حتی اگه تب سکوریتی رو every on بزنید باز با مشکل مواجه میشید.تنها راهش همون راهی که گفتم.یه روش برنامه نویسی هم داره ولی ممکنه بعضی اوقات جواب نده

تشکر از شما

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

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