2015-09-04 148 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如果「在我關閉添加數據的表單後再次加載表單」,它如何知道新數據? –

回答

0

我已經解決了這個通過改變數據庫路徑的問題,它是錯誤的,並通過創建一個插入後調用我的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()); 
       } 

      } 
     }