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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שמירת נתונים לSQLlite מפקד DataGrid בWPF

שמירת נתונים לSQLlite מפקד DataGrid בWPF

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 240 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מוטי מןמ מנותק
    מוטי מןמ מנותק
    מוטי מן
    כתב ב נערך לאחרונה על ידי
    #1

    אני משתמש בSQLlite עבור תוכנה מסוג WPF בC#, ואני טוען את הנתונים של טבלה מסוימת לפקד DataGrid עם הפונקציה LoadData, ואני רוצה לאפשר למשתמש לערוך את הנתונים שבפקד בטופס, ואז לעשות כפתור שמירה של הנתונים שנערכו חזרה לדאטהבייס באמצעות הפונקציה SaveChangesToDatabase, אבל אני מקבל שגיאה "שלא ניתן לגשת לקובץ שנזרק" היכן הטעות שלי?

            private SQLiteDataAdapter adapter;
            private DataTable dataTable;
            private DataView dataView;
    
            public static string softwareLibrary = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            public static string dbFilePath = Path.Combine(softwareLibrary, "calls.db");
            public static string connectionString = $"Data Source={dbFilePath}";
    
            private void LoadData()
            {
                using (SQLiteConnection connection = new SQLiteConnection(Globals.connectionString))
                {
                    connection.Open();
    
                    string filterId = txtId.Text.Trim();
                    string filterTime = txtTime.Text.Trim();
    
                    string selectSql = "SELECT * FROM tCalls WHERE CallId LIKE '%" + filterId + "%' AND CallTime LIKE '%" + filterTime + "%'";
    
                    using (SQLiteCommand cmd = new SQLiteCommand(selectSql, connection))
                    {
                        adapter = new SQLiteDataAdapter(cmd);
                        SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(adapter);
    
                        dataTable = new DataTable();
                        adapter.Fill(dataTable);
    
                        this.dataGridCalls.ItemsSource = dataTable.DefaultView;
                    }
    
                    connection.Close();
                }
            }
    
            private void SaveChangesToDatabase()
            {
                try
                {
                    if (dataTable != null && dataTable.GetChanges() != null)
                    {
                        using (SQLiteConnection connection = new SQLiteConnection(Globals.connectionString))
                        {
                            connection.Open();
                            using (SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(adapter))
                            {
                                adapter.Update(dataTable);
                            }
                            connection.Close();
                        }
                        dataTable.AcceptChanges();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"An error occurred while saving changes: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
    
    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      הקוד נראה טוב ממבט ראשון.
      איזה חבילות/ספריות מותקנות?
      תמחק לגמרי את הtry שיישאר רק הקוד, ותריץ ותראה ותציין באיזה שורה השגיאה קורית.

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

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

      מוטי מןמ תגובה 1 תגובה אחרונה
      1
      • מוטי מןמ מנותק
        מוטי מןמ מנותק
        מוטי מן
        השיב לdovid ב נערך לאחרונה על ידי
        #3

        @dovid כתב בשמירת נתונים לSQLlite מפקד DataGrid בWPF:

        ותציין באיזה שורה השגיאה קורית.

        כאן

        adapter.Update(dataTable) (שורה 46)

        איזה חבילות/ספריות מותקנות?

        97765114-4495-44c7-9e6b-93d3d34d5b85-image.png

        אני התקנתי את החבילה השניה, כנראה שהיא מתקינה אוטומטית את הראשונה

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

          @מוטי-מן תנסה ככה, לפי תיאור השגיאה הבעיה שלך היא לכאורה מול הadapter, כאן אתה פשוט יותר מחדש dataAdapter עם אותו SELECT

                  private void SaveChangesToDatabase()
                  {
                      try
                      {
                          if (dataTable != null && dataTable.GetChanges() != null)
                          {
                              DataTable dataTableToUpdate = dataTable;
                              using (SQLiteConnection connection = new SQLiteConnection(Globals.connectionString))
                              {
                                  connection.Open();
                                  using (SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter("SELECT * FROM tCalls", connection))
                                  {
                                      using (SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(dataAdapter))
                                      {
                                          commandBuilder.ConflictOption = ConflictOption.OverwriteChanges;
                                          commandBuilder.SetAllValues = true;
                                          dataAdapter.UpdateCommand = commandBuilder.GetUpdateCommand();
                                          dataAdapter.Update(dataTableToUpdate);
                                      }
                                  }
                              }
                              dataTable.AcceptChanges();
                          }
                      }
                      catch (Exception ex)
                      {
                          MessageBox.Show($"An error occurred while saving changes: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                      }
                  }
          

          ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
          הלינקיה שלי https://abaye.co/link.html

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

            הבעיה פשוטה, כפי שרמז @אביי הadapter מאותחל עם command + connection ששניהם עוברים הריגה בסיום המתודה load.
            במתודה save למרות שהadapter קיים, הcommand שלו לא.
            אפשר להשמיט במתודה load את הusing ופשוט לשים קונקשיין וקומנד בעלי אורך חיים מלא, או לעשות את הרעיון של אביי של יצירה מחדש.

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

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

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

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

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

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