דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. DataSet NullValue

DataSet NullValue

מתוזמן נעוץ נעול הועבר ארכיון code613m
37 פוסטים 4 כותבים 2.3k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #13

    @דוד ל.ט.

    אם אתה פונה למאפיין של DataRow שלא אוכלס אתה בהכרח מקבל שגיאה.

    יש מקומות בקוד שאני עובר בלולאת For Each על כל השורות ולא מקבל שום שגיאה, אלא אם שדה מסויים ריק הוא מחזיר DBNULL.

    פורסם במקור בפורום CODE613 ב21/01/2014 13:18 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #14

      @רחמים

      @דוד ל.ט.
      אם אתה פונה למאפיין של DataRow שלא אוכלס אתה בהכרח מקבל שגיאה.

      יש מקומות בקוד שאני עובר בלולאת For Each על כל השורות ולא מקבל שום שגיאה, אלא אם שדה מסויים ריק הוא מחזיר DBNULL.

      אתה טועה או בנתונים שסיפקת, או בעובדה זו עצמה.

      פורסם במקור בפורום CODE613 ב21/01/2014 14:03 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #15

        האם הקוד הבא אמור לקבל שגיאה?
        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)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #16

          @רחמים

          האם הקוד הבא אמור לקבל שגיאה?

          לא, הקוד לא אמור לזרוק שגיאה.
          אתה ממיר כל שורה לDataRow רגיל.
          אם תמחק את המילים As DataRow והטיפוס יישאר TypedDataRow הוא יזרוק שגיאה.

          פורסם במקור בפורום CODE613 ב21/01/2014 21:02 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #17

            מחקתי כמו שאמרת ולא קפצה שום שגיאה.

            פורסם במקור בפורום CODE613 ב21/01/2014 21:53 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #18

              @רחמים

              מחקתי כמו שאמרת ולא קפצה שום שגיאה.

              נכון, כי זה עדיין DataRow... רק כעת שמתי לב שלמעלה כתבת As DataTable... במקום DataTable תכתוב את שם הTypedDataTable שלך.
              זה אמור להיראות ככה: XxxxDataSet.XxxxDataTable. במקום הX יהיה לך את שם הDS והטבלה בהתאמה.

              פורסם במקור בפורום CODE613 ב21/01/2014 21:58 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #19

                עשיתי ככל אשר אמרת, ועדיין לא קפץ 😉

                פורסם במקור בפורום CODE613 ב21/01/2014 22:02 (+02:00)

                תגובה 1 תגובה אחרונה
                1
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #20

                  נכון, אני שוטה לגמרי. בItemArray לא תהיה לך שגיאה אף פעם.
                  הבעיה זה בגישה למאפיינים.
                  אם תכתוב: Dim a = Row.FieldName בהנחה שFieldName הוא ריק, תקפוץ לך שגיאה.
                  ואל תטרח לומר לי אם זה עבד לך...

                  פורסם במקור בפורום CODE613 ב21/01/2014 22:09 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #21

                    סוף סוף קפצה השגיאה...
                    אבל אני לא מבין למה אי אפשר להשתמש כמו שעשיתי בקוד ואז השגיאה לא תקפוץ ?
                    על מה דנים פה בעצם?

                    פורסם במקור בפורום CODE613 ב21/01/2014 22:21 (+02:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי
                      #22

                      תהיה בריא...
                      אתה צודק, כמו שאתה משתמש זה מעולה, ובדרך זו גם בכלל לא צריכים את הTypedDataSet (כלומר DataSet רגיל מספיק).
                      כל קיומו נועד ליצור שכבת אובייקטים קשוחים ולא אוספי אובייקט כמו הDataRow הרגיל.
                      בשביל מה טיפוסים קשוחים?
                      א. למנוע שגיאות. שלא תכניס טקסט בשדה מספרי.
                      ב. להקל על הקריאות בקוד
                      ג. להתמצאות בשדות ע"י ההשלמה אוטומטית

                      פורסם במקור בפורום CODE613 ב21/01/2014 22:28 (+02:00)

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      1
                      • רחמיםר מנותק
                        רחמיםר מנותק
                        רחמים מורחק
                        כתב ב נערך לאחרונה על ידי
                        #23

                        עד כעת נוצר לי ה DataSet ע''י אשף שנפתח לאחר שהוספתי לפרוייקט את המסד נתונים, ובאמת יצר את כל המחלקות הרבות שלו, וזה מה שאתה קורה TypedDataSet ?
                        אז איך אני יוצר DataSet רגיל בלא כל הבלגאן ?

                        פורסם במקור בפורום CODE613 ב21/01/2014 22:40 (+02:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • ש מנותק
                          ש מנותק
                          שמואל
                          כתב ב נערך לאחרונה על ידי
                          #24

                          תודה

                          פורסם במקור בפורום CODE613 ב22/01/2014 00:07 (+02:00)

                          תגובה 1 תגובה אחרונה
                          0
                          • רחמיםר מנותק
                            רחמיםר מנותק
                            רחמים מורחק
                            כתב ב נערך לאחרונה על ידי
                            #25

                            לדעתי צריך לעשות כמו הקוד הבא בלא להשתמש ב 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)

                            תגובה 1 תגובה אחרונה
                            3
                            • רחמיםר מנותק
                              רחמיםר מנותק
                              רחמים מורחק
                              כתב ב נערך לאחרונה על ידי
                              #26

                              כמו שראית בהודעת שגיאה שהבאת לעיל ה switch של C# לא מספיק מפותח הוא לא ידע להשוות כל דבר, אבל בקוד המתוקן השתמשתי ב TypeCode שזה enum מספרי ולכן הוא כל יכול לטפל בו.

                              פורסם במקור בפורום CODE613 ב23/01/2014 15:54 (+02:00)

                              תגובה 1 תגובה אחרונה
                              2
                              • ש מנותק
                                ש מנותק
                                שמואל
                                כתב ב נערך לאחרונה על ידי
                                #27

                                עובד מצוין
                                מה היתה הבעיה?

                                פורסם במקור בפורום CODE613 ב23/01/2014 15:46 (+02:00)

                                תגובה 1 תגובה אחרונה
                                0
                                • רחמיםר מנותק
                                  רחמיםר מנותק
                                  רחמים מורחק
                                  כתב ב נערך לאחרונה על ידי
                                  #28

                                  למעשה זה חסרון ב 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)

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • ש מנותק
                                    ש מנותק
                                    שמואל
                                    כתב ב נערך לאחרונה על ידי
                                    #29

                                    @רחמים

                                    לדעתי צריך לעשות כמו הקוד הבא בלא להשתמש ב 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;
                                    		}
                                    	}
                                    
                                    }
                                    

                                    אני מנסה לעשות את הקוד הזה והוא נותן לי שגיאה בswich, להלן השגיאה

                                    A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type

                                    לא הצלחתי להתמודד עם זה

                                    פורסם במקור בפורום CODE613 ב23/01/2014 15:20 (+02:00)

                                    תגובה 1 תגובה אחרונה
                                    0
                                    • dovidD מנותק
                                      dovidD מנותק
                                      dovid ניהול
                                      כתב ב נערך לאחרונה על ידי
                                      #30

                                      @רחמים

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

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

                                      לא ממש.
                                      האדפטר הוא זה שכפול מס' הטבלאות, וזה כבר לא ארבע שורות.
                                      ונכון זה תמיד טוב למדר למחלקה נפרדת את ה"לכלוך".
                                      אבל זה בדיוק DataSet רגיל, כלומר השאלה אם לעשות זאת באותה המחלקה או לא, לא הופכת את המחלקה שלך לשווה ערך לTypedDataSet שמביאה מעלות, מעטות אמנם.

                                      פורסם במקור בפורום CODE613 ב22/01/2014 14:40 (+02:00)

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      תגובה 1 תגובה אחרונה
                                      1
                                      • רחמיםר מנותק
                                        רחמיםר מנותק
                                        רחמים מורחק
                                        כתב ב נערך לאחרונה על ידי
                                        #31

                                        @דוד ל.ט.

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

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

                                        פורסם במקור בפורום CODE613 ב22/01/2014 14:04 (+02:00)

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • ש מנותק
                                          ש מנותק
                                          שמואל
                                          כתב ב נערך לאחרונה על ידי
                                          #32

                                          אם כבר דברו עלי...
                                          אני מאוד נהנה משיטת עבודה עם הדטה סט כשהוא מחובר לקלסים
                                          הכל עובד מצוין וזה גם מתחבר לאקסס (למי שקשה לו להפרד ...)
                                          ותודה לארכיטקט שהדריך אותי בצורת העבודה
                                          אבל אם לא הצורך להתחבר לאקסס לכאורה כבר עדיף דרך entity fremwork
                                          ואני כבר באמת מחכה שמישהוא יעלה כאן דוגמא בסיסית לאנטיטי ...

                                          פורסם במקור בפורום CODE613 ב22/01/2014 13:56 (+02:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום