Member 12349103 Ответов: 2

C# обновить базу данных доступа


I am able to Save Data to a Access databse , now when i add new entry i try to refresh the database but the new entry dont show until i close the program and open it back up. I have 2 buttons one Update and the other Refresh. I am using Parameters. It would be better to use one meathod to do both (thats over my head at the moment) so i have 2 buttons. I dont get any errors when i try to Refresh so I dont know where to start.
 
Thanks 
 
My Update code working fine.

<pre lang="c#"><pre>private void btnUpdate_Clicked(object sender, RoutedEventArgs e)  
       {  
           using (var myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["Connection"].ToString()))  
           {  
               using (var myCmd = new OleDbCommand("insert into [Sheet1](Box1,Box2,Box3,Box4,Box5,Box6,Box7,Box8)Values(@nm1,@nm2,@nm3,@nm4,@nm5,@nm6,@nm7,@nm8)", myCon))  
               {                      
                   myCmd.Parameters.AddWithValue("@nm1", txt_Box1.Text);  
                   myCmd.Parameters.AddWithValue("@nm2", txt_Box2.Text);  
                   myCmd.Parameters.AddWithValue("@nm3", txt_Box3.Text);  
                   myCmd.Parameters.AddWithValue("@nm4", txt_Box4.Text);  
                   myCmd.Parameters.AddWithValue("@nm5", TXT_Box5.Text);  
                   myCmd.Parameters.AddWithValue("@nm6", txt_Box6.Text);  
                   myCmd.Parameters.AddWithValue("@nm7", txt_Box7.Text);  
                   myCmd.Parameters.AddWithValue("@nm8", txt_Box8.Text);  
  
                   try  
                   {  
                       myCon.Open();  
                       int z = myCmd.ExecuteNonQuery();  
                       if (z > 0)  
                       {  
                           MessageBox.Show("Data Inserted");  
  
                      }  
  
                   }  
                   catch (Exception ex)  
                   {  
                        MessageBox.Show(ex.Message);
                        return;
                   }  
               }  
           }  
  
              
       }  


Мое обновление не обновляет базу данных без каких-либо ошибок givens.

private void btn_Refresh_Click(object sender, EventArgs e)  
        {  
  
            using (var myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["Connection"].ToString()))  
            {  
                using (var myCmd = new OleDbCommand("UPDATE Sheet1 SET Box1 =@nm1,Box2 = @nm2, Box3=@nm3, Box4 = @nm4, Box5 = @nm5,Box6  = @nm6, Box7 = @nm7 WHERE Box8 = @nm8", myCon))  
                {                      
                    myCmd.Parameters.AddWithValue("@nm1", txt_Box1.Text);  
                    myCmd.Parameters.AddWithValue("@nm2", txt_Box2.Text);  
                    myCmd.Parameters.AddWithValue("@nm3", txt_Box3.Text);  
                    myCmd.Parameters.AddWithValue("@nm4", txt_Box4.Text);  
                    myCmd.Parameters.AddWithValue("@nm5", TXT_Box5.Text);  
                    myCmd.Parameters.AddWithValue("@nm6", txt_Box6.Text);  
                    myCmd.Parameters.AddWithValue("@nm7", txt_Box7.Text);  
                    myCmd.Parameters.AddWithValue("@nm8", txt_Box8.Text);  
  
                    try  
                    {  
                        myCon.Open();  
                        int z = myCmd.ExecuteNonQuery();  
                        MessageBox.Show("Data Updated");  
                         
                    }  
                    catch (Exception ex)  
                    {  
                        //Handle exception as needed  
                    }  
                }  
            }  
  
             
        }  


получить данные

private void loadgrid()
      {
          OleDbConnection con = new OleDbConnection();
          con.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString();
          con.Open();
          OleDbCommand cmd = new OleDbCommand();
          cmd.CommandText = "Select * from [Sheet1]";
          cmd.Connection = con;
          OleDbDataReader rd = cmd.ExecuteReader();
          dataGrid.ItemsSource = rd;

      }


Что я уже пробовал:

Часы поиска в интернете и примеры программ

Dave Kreskowiak

Твой вопрос не имеет особого смысла. Оба ваших обработчика щелчков кнопок записывают данные в базу данных, которая, как я предполагаю, является рабочим листом Excel.

INSERT добавляет новые данные, а Update обновляет существующую запись.

Какое приложение вы пишете и где находится ваш код, который считывает данные базы данных и связывает их с любыми элементами управления, которые вы используете для отображения данных? Это код, который отсутствует и который вам нужно выполнить после выполнения операций SQL Insert или Update.

Dave Kreskowiak

Закрыть и снова открыть какой файл?

Кроме того, я с подозрением отношусь к тому, что вы называете файлом Access, если только у вас на самом деле нет таблицы в вашей базе данных Access под названием "Sheet1". Это обычно говорит мне Excel.

2 Ответов

Рейтинг:
5

Wendelius

Не уверен, правильно ли я интерпретирую вопрос, но в событии btnUpdate_Clicked вы вставляете данные, а в btn_Refresh_Click обновляете данные.

Где вы получаете недавно вставленные или обновленные данные из базы данных в программу?

Я бы предположил, что у вас есть кнопка update/save, которая либо обновляет, либо вставляет запись в зависимости от того, является ли она существующей или новой, и кнопка refresh выполнит оператор SELECT для извлечения данных из базы данных. Поскольку ни одна из кнопок теперь не извлекает данные, я предполагаю, что вы делаете это только тогда, когда программа открыта, и именно поэтому вы не видите новые данные в своей программе после сохранения.

Кроме того, как уже упоминалось, правильно обрабатывайте исключения, как минимум показывайте текст сообщения пользователю.


Wendelius

Что произойдет, если вы вызовете метод loadgrid в конце метода update или refresh?

Кроме того, в операторах DML вы обновляете таблицу с именем Sheet1, а в select вы запрашиваете HotSheet. Если это другая таблица, то как она обновляется?

Member 12349103

Венделиус

молодец, я добавил метод loadgrid в конец моего события Refresh_Click, и он сработал.

Спасибо

Wendelius

Буду рад, если смогу помочь.

Рейтинг:
1

OriginalGriff

Просто: ваша вставка не работает, и ваш catch блок отбрасывает информацию и игнорирует ее.
Почему?
Этот:

myCmd.Parameters.AddWithValue("@nm1", txt_Box1);  
myCmd.Parameters.AddWithValue("@nm2", txt_Box2);  
Должно быть:
myCmd.Parameters.AddWithValue("@nm1", txt_Box1.Text);  
myCmd.Parameters.AddWithValue("@nm2", txt_Box2.Text);  


Не оставляйте пустым catch блоки - они скрывают ошибки вместо того, чтобы дать вам знать, что нужно исправить...


Member 12349103

это была ошибка копирования и вставки, извините.