2015-09-04 3 views
0

Я работаю с локальной базой данных, и она работает хорошо, все приложение. Проблема в том, что я сталкиваюсь с некоторыми неприятными вещами. Если я обновляю или добавляю новые данные в свою локальную базу данных, мне нужно закрыть все приложение и запустить его снова, чтобы я мог видеть новые данные, которые я ввел. Почему это не освежает и как я могу его решить?Локальная база данных не обновляется после обновления данных с C#

Вот как добавить данные:

private void button1_Click(object sender, EventArgs e) 
{ 
      if (radioButton1.Checked) 
      { 
       label5.Text = "1"; 
      } 
      else 
      { 
       label5.Text = "0"; 
      } 

      if (radioButton2.Checked) 
      { 
       label5.Text = "2"; 
      } 

      if (textBox1.Text.Length == 0) 
      { 
       textBox1.Text = "Fara"; 
      } 

      if (textBox2.Text.Length == 0) 
      { 
       textBox2.Text = "0"; 
      } 

      if (textBox3.Text.Length == 0) 
      { 
       textBox3.Text = "0"; 
      } 

      if (numeTextBox.TextLength != 0 && prenumeTextBox.TextLength != 0) 
      { 
       var connString = (@"Data Source=" + Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + @"\Angajati.sdf"); 

       //var connString = @"Data Source=C:\Users\Andrei\Documents\Visual Studio 2010\Projects\Stellwag\Stellwag\Angajati.sdf"; 

       using (var conn = new SqlCeConnection(connString)) 
       { 
        try 
        { 
         //deschide conectiunea in db 
         conn.Open(); 
         //creaza comanda in SQL Server CE 
         SqlCeCommand cmd = new SqlCeCommand(); 
         //conecteaza cmd la conn 
         cmd.Connection = conn; 
         //adauga parametru pt campul poza cu value image 
         SqlCeParameter picture = new SqlCeParameter("@Poza", SqlDbType.Image); 
         MemoryStream ms = new MemoryStream(); 
         pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat); 
         byte[] a = ms.GetBuffer(); 
         ms.Close(); 
         cmd.Parameters.Clear(); 
         cmd.Parameters.AddWithValue("@Poza", a); 
         cmd.CommandText = "INSERT INTO info(Nume, Prenume, Data, Proiect, Schimburi, Poza, Acord, Baza) VALUES('" + numeTextBox.Text.Trim() + "', '" + prenumeTextBox.Text.Trim() + "', '" + dateTimePicker1.Value.ToShortDateString() + "', '" + textBox1.Text.Trim() + "', " + label5.Text + " , @Poza, " + textBox2.Text + ", " + textBox3.Text + ");"; 
         cmd.ExecuteNonQuery(); 

         conn.Close(); 
         MessageBox.Show("Salvat cu succes!"); 
         textBox1.Clear(); 
         textBox2.Clear(); 
         textBox3.Clear(); 
         numeTextBox.Clear(); 
         prenumeTextBox.Clear(); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.ToString()); 
        } 
       } 
      } 
      else 
      { 
       MessageBox.Show("Trebuie sa completezi campurile inainte de a salva!"); 
      } 
} 

Вот как я обновить:

private void button1_Click_1(object sender, EventArgs e) 
{ 
      //var connString = (@"Data Source= |DataDirectory|\Angajati.sdf"); 
      var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Angajati.sdf"); 

      using (var conn = new SqlCeConnection(connString)) 
      { 
       try 
       { 
        conn.Open(); 
        SqlCeCommand cmd = new SqlCeCommand(); 
        //conecteaza cmd la conn 
        cmd.Connection = conn; 
        //adauga parametru pt campul poza cu value image 
        SqlCeParameter picture = new SqlCeParameter("@Poza", SqlDbType.Image); 
        MemoryStream ms = new MemoryStream(); 
        pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat); 
        byte[] a = ms.GetBuffer(); 
        ms.Close(); 
        cmd.Parameters.Clear(); 
        cmd.Parameters.AddWithValue("@Poza", a); 
        var query = "UPDATE info SET Nume='" + textBox5.Text + "' , Prenume='" + textBox4.Text + "' , Data='" + dateTimePicker1.Value.ToShortDateString() + "', Proiect='" + textBox1.Text + "', Schimburi='" + label10.Text + "', [email protected], Acord='" + textBox2.Text + "', Baza='" + textBox3.Text + "' WHERE Nume='" + textBox5.Text + "' AND Prenume='" + textBox4.Text + "'"; 
        cmd.CommandText = query; 
        cmd.ExecuteNonQuery(); 
        MessageBox.Show("Salvat cu succes!"); 
        this.Close(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 
      } 
} 

Вот как я искать данные:

private void button1_Click(object sender, EventArgs e) 
{ 
      if (textBox1.Text.Length != 0) 
      { 

       var numePrenume = textBox1.Text.Trim().Split(' '); 


        if (numePrenume.Count() > 1) 
        { 
         var nume = numePrenume[0]; 
         var prenume = numePrenume[1]; 
         var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Angajati.sdf"); 

         using (var conn = new SqlCeConnection(connString)) 
         { 
          try 
          { 
           conn.Open(); 
           var query = "SELECT COUNT(*) FROM info WHERE Nume='" + nume + "' AND Prenume='" + prenume + "'"; 
           var command = new SqlCeCommand(query, conn); 
           var dataAdapter = new SqlCeDataAdapter(command); 
           var dataTable = new DataTable(); 
           dataAdapter.Fill(dataTable); 

           //checks if there's the searched record is in the db. 
           int infoCount = (int)command.ExecuteScalar(); 

           if (infoCount > 0) 
           { 
            Info form = new Info(nume, prenume); 
            form.Show(); 
           } 
           else 
           { 
            MessageBox.Show("Nu exista un angajat cu acest nume"); 
           } 
          } 
          catch (Exception ex) 
          { 
           MessageBox.Show(ex.ToString()); 
          } 
         } 
        } 
        else 
        { 
         MessageBox.Show("Nu ai introdus prenumele"); 
        } 
       } 
       else 
       { 
        MessageBox.Show("Nu ai introdus nici un nume!"); 
       } 
} 
+0

где ваш код, загружать данные? – Arash

+0

Загрузить данные где? Я добавляю данные в отдельной форме. Я закрываю его, я пытаюсь найти ранее добавленное имя и не работает. Если я закрою приложение и снова открою его, он будет работать. Если я загружаю данные в форму, в которой я должен искать, она тоже не будет работать, потому что форма не загружается после закрытия формы, где я добавляю данные. У меня есть данные загрузки, но для других форм. – Ezekiel

+0

@Ezekiel if "форма не загружается снова после закрытия формы, где я добавляю данные", как она узнает о новых данных? –

ответ

0

Я решил эту проблему проблему, изменив путь к db, в нем что-то не так, и создав функцию обновления для моего gridView, вызванного после вставки. Беллоу код для решения:

Получение пути, как это сейчас:

string startPath = Application.StartupPath; 
var filepath = startPath + "\\" + "Grupe.sdf"; 
var connString = (@"Data Source=" + filepath +""); 

Функция обновления:

public void refresh() 
     { 
      var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Grupe.sdf"); 
      using (var conn = new SqlCeConnection(connString)) 
      { 
       try 
       { 
        conn.Open(); 
        var query = "SELECT * FROM copii"; 
        var command = new SqlCeCommand(query, conn); 
        var dataAdapter = new SqlCeDataAdapter(command); 
        var dataTable = new DataTable(); 
        dataAdapter.Fill(dataTable); 

        dataGridView1.DataSource = dataTable; 

       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 

      } 
     } 
Смежные вопросы