DataSet NullValue
-
אבל אצלי שאני משתמש ב 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)
-
-
האם הקוד הבא אמור לקבל שגיאה?
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)
-
מחקתי כמו שאמרת ולא קפצה שום שגיאה.
נכון, כי זה עדיין DataRow... רק כעת שמתי לב שלמעלה כתבת As DataTable... במקום DataTable תכתוב את שם הTypedDataTable שלך.
זה אמור להיראות ככה: XxxxDataSet.XxxxDataTable. במקום הX יהיה לך את שם הDS והטבלה בהתאמה.פורסם במקור בפורום CODE613 ב21/01/2014 21:58 (+02:00)
-
-
תהיה בריא...
אתה צודק, כמו שאתה משתמש זה מעולה, ובדרך זו גם בכלל לא צריכים את הTypedDataSet (כלומר DataSet רגיל מספיק).
כל קיומו נועד ליצור שכבת אובייקטים קשוחים ולא אוספי אובייקט כמו הDataRow הרגיל.
בשביל מה טיפוסים קשוחים?
א. למנוע שגיאות. שלא תכניס טקסט בשדה מספרי.
ב. להקל על הקריאות בקוד
ג. להתמצאות בשדות ע"י ההשלמה אוטומטיתפורסם במקור בפורום CODE613 ב21/01/2014 22:28 (+02:00)
-
לדעתי צריך לעשות כמו הקוד הבא בלא להשתמש ב NEW כי כדי לבדוק טיפוס לא צריך ליצור מופע של האובייקט בזיכרון:
public void testDbNull(DataColumnCollection colums) { //פונקציה מקבלת בפרמטר ליסט של עמודות foreach (DataColumn col in colums) { switch (col.DataType) { case typeof(DateTime): col.DefaultValue = DateTime.Now; break; case typeof(int): if (!col.AutoIncrement) { col.DefaultValue = 0; } break; case typeof(string): col.DefaultValue = ""; break; } } }
פורסם במקור בפורום CODE613 ב22/01/2014 07:58 (+02:00)
-
למעשה זה חסרון ב C# שלא קיים בVB ואני פשוט עשיתי תרגום, אז ב C# הדרך זה לעשות כך:
public void testDbNull(DataColumnCollection colums) { //פונקציה מקבלת בפרמטר ליסט של עמודות foreach (DataColumn col in colums) { switch (Type.GetTypeCode(col.DataType)) { case TypeCode.DateTime: col.DefaultValue = DateTime.Now; break; case TypeCode.Int32: if (!col.AutoIncrement) { col.DefaultValue = 0; } break; case TypeCode.String: col.DefaultValue = ""; break; } } }
פורסם במקור בפורום CODE613 ב23/01/2014 15:35 (+02:00)