DataSet NullValue
-
פשוט מאוד:
אתה ניגש לתפריט פרוג'קט, הוסף פריט חדש, בוחר מסד MDF ואז הוא כבר לבד פותח את האשף של הדטה סט אחר שסיימת ליצור את הדטה סט אתה יוצר טבלאות קשרי גומלין ושאילתות ב MDF ומושך אותם לתוך הדטה סט אחר כך אתה מושך מהדטה סורסס את הטבלאות לטופס וזהו בחמש דקות בנית תוכנההערה חשובה: אם הגדרת ערכי ברירת מחדל עבור שדות מסויימים בטבלאות ה MDF צריך להגדיר זאת שוב בתוך הדטה סט במאפיינים של אותו שדה, כיון שהדטה סט לא יודע לקורא את כל המאפיינים של כל שדה שהוא מתקשר איתו ב MDF.
פורסם במקור בפורום CODE613 ב20/01/2014 19:34 (+02:00)
-
אפשר שהדאטאסט יסכים לקבל NULL.
לך למאפייני העמודה, ותחליף במאפיין NullValue את הערך (Throw exception) לערך (Nothing).
אם זה מעצבן אותך לעשות את זה על כל עמודה אתה יכול לבחור את כל העמודות (עם שיפט) - ואז לשנות את הכל בבת אחת.פורסם במקור בפורום CODE613 ב21/01/2014 01:33 (+02:00)
-
לגבי ברירת מחדל, נראה שא"א כביטוי, תראה כאן מה אפשר לעשות.
אני באופן אישי לא אהבתי את הדרך שם, כי כשתעדכן את הטבלה (או תמחק ותיצור מחדש) יש סיכוי שהDS ידרוס לך את הפונקצייה.פורסם במקור בפורום CODE613 ב21/01/2014 02:29 (+02:00)
-
אז מה יצא למסקנה? אם הדטה סט מחובר לאקסס הוא לא מקבל ערכי NULL ואם הוא מחובר ל MDF הוא כן מקבל?
פורסם במקור בפורום CODE613 ב21/01/2014 07:07 (+02:00)
-
אז מה יצא למסקנה? אם הדטה סט מחובר לאקסס הוא לא מקבל ערכי NULL ואם הוא מחובר ל MDF הוא כן מקבל?
לא.
בכל מקרה אתה צריך לשנות את הNullValue, התלות אם יהיה אפשר ערכי NULL או לא, תלויה בהגדרת השדה אם הוא יכול לקבל ערכי NULL.פורסם במקור בפורום CODE613 ב21/01/2014 08:30 (+02:00)
-
אבל אצלי שאני משתמש ב MDF המאפיין הNullValue מוגדר כ Throw exception
והמאפיין AllowDNNull מוגדר כ TRUE
והמאפיין DefaultValue מוגדר כ DNNull
והכל עובד מצויין ואין שגיאות שקופצות בשדות NULL
אני משתמש ב VS 2010 אם זה משנה.פורסם במקור בפורום CODE613 ב21/01/2014 08:35 (+02:00)
-
אבל אצלי שאני משתמש ב MDF המאפיין הNullValue מוגדר כ Throw exception
והמאפיין AllowDNNull מוגדר כ TRUE
והמאפיין DefaultValue מוגדר כ DNNull
והכל עובד מצויין ואין שגיאות שקופצות בשדות NULL
אני משתמש ב VS 2010 אם זה משנה.אם אתה פונה למאפיין של DataRow שלא אוכלס אתה בהכרח מקבל שגיאה.
לגבי ברירת מחדל, נראה שא"א כביטוי, תראה כאן מה אפשר לעשות.
אני באופן אישי לא אהבתי את הדרך שם, כי כשתעדכן את הטבלה (או תמחק ותיצור מחדש) יש סיכוי שהDS ידרוס לך את הפונקצייה.נכון.
הדרך הנכונה לדעתי זה ללכוד באירוע שורה חדשה ולהשים את הערך:dataSetInstant.TableName.TableNewRow += (s, e) => { e.Row("DateInsert") = Now; };
פורסם במקור בפורום CODE613 ב21/01/2014 10:59 (+02:00)
-
אפשר שהדאטאסט יסכים לקבל NULL.
לך למאפייני העמודה, ותחליף במאפיין NullValue את הערך (Throw exception) לערך (Nothing).
אם זה מעצבן אותך לעשות את זה על כל עמודה אתה יכול לבחור את כל העמודות (עם שיפט) - ואז לשנות את הכל בבת אחת.לערכים לא סטרינגיים (כמו תאריך) א"א לקבוע Empty או Nothing. אז צריך לשים ערך כל שהוא. וזה א"א עם Shift...
פורסם במקור בפורום CODE613 ב21/01/2014 11:38 (+02:00)
-
עוד הערה:
כאלה שמשתמשים הרבה עם הTypedDataSet, יכולים לשקול לרשת את הDS+DT+DR. ולקסטם אותם.
זה ממש נוח, ולא נמחק בייבוא מחדש וכדומה.
כל דבר שלא רוצים לקסטם, לא צריך לכתוב לו קוד.פורסם במקור בפורום CODE613 ב21/01/2014 11:48 (+02:00)
-
@דוד ל.ט.
אם אתה פונה למאפיין של DataRow שלא אוכלס אתה בהכרח מקבל שגיאה.
יש מקומות בקוד שאני עובר בלולאת For Each על כל השורות ולא מקבל שום שגיאה, אלא אם שדה מסויים ריק הוא מחזיר DBNULL.
פורסם במקור בפורום CODE613 ב21/01/2014 13:18 (+02:00)
-
-
האם הקוד הבא אמור לקבל שגיאה?
ME=מחלקה שיורשת מדטה גרידDim DTable As DataTable = DirectCast(Me.DataContext, CollectionViewSource).Source Dim SB As New StringBuilder For Each Row As DataRow In DTable.Rows Dim RowSB As New StringBuilder For Each Item In Row.ItemArray RowSB.Append(Item.ToString & ", ") Next SB.AppendLine(RowSB.ToString) Next פורסם במקור בפורום CODE613 ב21/01/2014 20:24 (+02:00)
-
-
מחקתי כמו שאמרת ולא קפצה שום שגיאה.
פורסם במקור בפורום CODE613 ב21/01/2014 21:53 (+02:00)
-
מחקתי כמו שאמרת ולא קפצה שום שגיאה.
נכון, כי זה עדיין DataRow... רק כעת שמתי לב שלמעלה כתבת As DataTable... במקום DataTable תכתוב את שם הTypedDataTable שלך.
זה אמור להיראות ככה: XxxxDataSet.XxxxDataTable. במקום הX יהיה לך את שם הDS והטבלה בהתאמה.פורסם במקור בפורום CODE613 ב21/01/2014 21:58 (+02:00)
-
עשיתי ככל אשר אמרת, ועדיין לא קפץ
פורסם במקור בפורום CODE613 ב21/01/2014 22:02 (+02:00)
-
נכון, אני שוטה לגמרי. בItemArray לא תהיה לך שגיאה אף פעם.
הבעיה זה בגישה למאפיינים.
אם תכתוב: Dim a = Row.FieldName בהנחה שFieldName הוא ריק, תקפוץ לך שגיאה.
ואל תטרח לומר לי אם זה עבד לך...פורסם במקור בפורום CODE613 ב21/01/2014 22:09 (+02:00)
-
סוף סוף קפצה השגיאה...
אבל אני לא מבין למה אי אפשר להשתמש כמו שעשיתי בקוד ואז השגיאה לא תקפוץ ?
על מה דנים פה בעצם?פורסם במקור בפורום CODE613 ב21/01/2014 22:21 (+02:00)
-
תהיה בריא...
אתה צודק, כמו שאתה משתמש זה מעולה, ובדרך זו גם בכלל לא צריכים את הTypedDataSet (כלומר DataSet רגיל מספיק).
כל קיומו נועד ליצור שכבת אובייקטים קשוחים ולא אוספי אובייקט כמו הDataRow הרגיל.
בשביל מה טיפוסים קשוחים?
א. למנוע שגיאות. שלא תכניס טקסט בשדה מספרי.
ב. להקל על הקריאות בקוד
ג. להתמצאות בשדות ע"י ההשלמה אוטומטיתפורסם במקור בפורום CODE613 ב21/01/2014 22:28 (+02:00)
-
עד כעת נוצר לי ה DataSet ע''י אשף שנפתח לאחר שהוספתי לפרוייקט את המסד נתונים, ובאמת יצר את כל המחלקות הרבות שלו, וזה מה שאתה קורה TypedDataSet ?
אז איך אני יוצר DataSet רגיל בלא כל הבלגאן ?פורסם במקור בפורום CODE613 ב21/01/2014 22:40 (+02:00)
13/37