עבור לתוכן

שמירת וטעינת נתונים c#

Featured Replies

פורסם

אני רוצה לשמור את נתונים שמכניסים לתוכנה תוך כדי השימוש בה, כדי שאני אוכל לטעון אותם בהפעלה הבאה או בכלל, יש צורה מקובלת ו/או עדיפה לעשות את זה?

זאת אומרת, אני יכול פשוט לכתוב הכל בקובץ טקסט ולטעון את המידע ממנו בשעת הצורך, אני יכול להשתמש בקובץ xml, ראיתי מישהו שבכלל המליץ לשמור מידע בתור ini.

מה הכי יעיל ומהיר?

  • תגובות 36
  • צפיות 12.7k
  • נוצר
  • תגובה אחרונה
פורסם

ההבדלים הם בשימוש. יעילות ומהירות לא משחקים תפקיד כאן. את טוען את הקובץ סה"כ פעם אחת בעלייה ואולי פעם שומר אליו, זו פעולת IO ותהייה איטית (יחסית) בכל מקרה.

מה שכן משנה זה השימוש והנוחות שלך. אם את צריך לשמור מבני נתונים מסובכים רצוי XML, אם אתה צריך סתם טבלת שם/ערך אז קובץ INI יותר הגיוני, אם אתה שומר מידע רגיש שדורש הצפנה אז זה משהו אחר וכו'.

תעשה מה שנח לך לממש, הפונקציונליות דומה.

פורסם
  • מחבר

אני שומר כל פעם שיש שינוי כדי לא לאבד מידע, לא משהו מורכב או מסובך, סתם טבלה.

פורסם

אם זו סתם טבלה, לדעתי מספיק קובץ טקסט כלשהו בפורמט שהכי נוח לך.

אם אתה רואה שכל פעם שאת שומר זה "כבד" לו מדי, אז תשמור רק בזכרון ותכתוב לקובץ בתדירות נמוכה יותר, או רק ביציאה למשל.

פורסם

אם אתה רוצה רק קונפיגורציה בסיסית שתיטען כשאתה מריץ את האפליקציה ותישמר כשאתה יוצא ממנה, אז הכי פשוט להשתמש בפיצ'ר שנקרא Settings. הפיצ'ר כבר מנהל הכל עבורך כולל שמירה וטעינה של הקובץ.

https://msdn.microsoft.com/en-us/library/bb397750(v=vs.110).aspx

אם אתה רוצה יותר מזה אז כדאי להתחיל לנהל את העניינים בעצמך. הכל שאלה של איזה מידע אתה צריך לשמור, באיזו צורה אתה רוצה שהוא יהיה נגיש וכד'.

פורסם
  • מחבר

אני אפרט יותר, אני בונה תוכנה לניהול המשק בית, אתם יודעים רשימות של כל הכנסות רשימות של כל ההוצאות, קצת חישובים, לא משהו מסובך.

אני רוצה שכל פעם שיוסיפו פרטים לאחת הרשימות זה ישמר גם בקובץ, כדי שאם יקרוס, לא יסגרו טוב או כל דבר אחר המידע ישמר ולא ילך לאיבוד.

אני רוצה לשמור את כל המידע, כל חודש בקובץ חדש.

לפי זה נראה שsettings לא יעזור כאן.

עד עכשיו הייתי כותב את המידע סתם בקובץ טקסט, השאלה מה הדרך הכי טובה, התוכנה היא למטרת לימוד, ולכן לא אכפת שאולי זה לא הרבה מידע ולא צריך להשקיע, אני רוצה ללמוד לעשות את זה נכון, לכן אני רוצה לדעת מה הדרך הכי טובה, ולו יצוייר שמדובר כאן בהרבה מידע מסבך.

פורסם

הדבר הנכון לעשות זה להשתמש במסד נתונים. זה אמנם קצת מסורבל, אבל כמו שאמרת - אתה רוצה ללמוד.

אתה יכול להתקין sql express וללמוד לעבוד איתו, או לחילופין אתה יכול לשלב באפליקציה שלך מסד נתונים מובנה כגון sqlite. אני בטוח שתוכל למצוא דוגמאות שמראות איך לשלב sqlite בפרוייקט #C.

זו גם תהיה הזדמנות טובה ללמוד SQL, שפה מאוד שימושית כיום.

בשביל דברים פשוטים יחסית הייתי משתמש ב-xml. אתה יכול להשתמש ב-XmlSerializer שיודע אוטומטית להמיר אובייקטים ל-xml ובחזרה. פשוט חפש בגוגל c# xmlserializer tutorial ותמצא הרבה דוגמאות.

אתה יכול גם להגדיר xml schema (קובץ מסוג xsd שמגדיר את מבנה ה-xml שלך) ואז להשתמש בכלי שאוטומטית מייצר ממנו מחלקות #C, ועוד את רוב העבודה עבורך.

פורסם
  • מחבר

אוו, sql הרבה זמן רציתי ללמוד sql.

עם xml התחלתי לעבוד כבר (בתוכנה עם הערים והרחובות, אם אתה זוכר).

אני חושב שאני אתחיל הפעם עם sql.

אולי אני קצת אגע בשאר אופציות הxml שהזכרת, רק כדי טיפה להכיר את הנושא.

תודה.

נערך על-ידי eido300

פורסם
  • מחבר

בלי קשר לעניין, המשפט הבא הוא משפט תקין?

 sumTb.Text = (int.Parse(incomeTb.Text) - int.Parse(expensesTb.Text)).ToString();

עריכה:

טוב אני לא מוצא אופציה יותר טובה, אז אני מניח שזה תקין.

נערך על-ידי eido300

פורסם
  • מחבר

.

נערך על-ידי eido300

פורסם

נראה תקין לחלוטין, פרט לכך שבד"כ עדיף להשתמש ב-TryParse שמוודאת שהקלט תקין (Parse זורקת חריגה במקרה שהקלט אינו מספרי).

פורסם
  • מחבר

TryParse לא מסבך את העניינים? בשביל להשתמש בו אני צריך ליצור עוד משתנים ולהתחיל עם משפטי if, למה לא לעשות דבר כזה:


try
{
sumTb.Text = (int.Parse(incomeTb.Text) - int.Parse(expensesTb.Text)).ToString();
}
catch (FormatException)
{
toolStripStatusLabel1.ForeColor = Color.Red;
toolStripStatusLabel1.Text = "יש להכניס מספרים בלבד";
}

פורסם

עקרונית if/else יותר יעיל מ-try/catch, אבל זה לא יותר מדי קריטי. לדעתי קוד כזה הוא יותר יפה:


int income, expenses;
if (int.TryParse(incomeTb.Text, out income) &&
int.TryParse(expensesTb.Text, out expenses)) {
sumTb.Text = (income - expenses).ToString();
} else {
toolStripStatusLabel1.ForeColor = Color.Red;
toolStripStatusLabel1.Text = "יש להכניס מספרים בלבד";
}

פורסם
  • מחבר

אוקיי, אני אשנה את זה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים