שמירת וטעינת נתונים c# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


eido300

Recommended Posts

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

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

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

קישור לתוכן
שתף באתרים אחרים

  • תגובות 36
  • נוצר
  • תגובה אחרונה

ההבדלים הם בשימוש. יעילות ומהירות לא משחקים תפקיד כאן. את טוען את הקובץ סה"כ פעם אחת בעלייה ואולי פעם שומר אליו, זו פעולת 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 שהזכרת, רק כדי טיפה להכיר את הנושא.

תודה.

קישור לתוכן
שתף באתרים אחרים

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

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

עריכה:

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

קישור לתוכן
שתף באתרים אחרים

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 = "יש להכניס מספרים בלבד";
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...