2016-08-09 114 views
-1

Ich bin neu bei Stackoverflow, aber ich versuche mein Bestes, um mein Problem so klar wie möglich zu vermitteln, und Sie können mich fragen, ob Sie verwirrt oder nicht klar sind!Wie Einfügen von zwei Bildfeld in MS Access-Datenbank mit C#?

Mein Code funktioniert, aber ich möchte, dass mir jemand den professionellen und effizienten Code mit derselben Funktionalität vorschlägt.

Mein Code ist alles über das Einfügen von Daten in MS-Access-Datenbank-Tabelle, die zwei Bildfelder haben.

Vielen Dank im Voraus

ist hier mein Code:

//-Code auf die Schaltfläche klicken Ereignis Einsatz

private void btnInsert_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      var pic = File.ReadAllBytes(imageName); 
      var pic1 = File.ReadAllBytes(imageName1); 

      OleDbConnection OleDbConn = new OleDbConnection(cs); 
      OleDbCommand OleDbComm = new OleDbCommand(); 
      OleDbComm = OleDbConn.CreateCommand(); 

      OleDbComm.CommandText = "insert into candidateTB (pollingStationID,candidateName,candidateCNIC,"+ 
       "candidateCell,gender,candidateEmail,address,description,candidateParty,candidateImage) " + 
       "values (" + textBox2.Text + ",'" + textBox3.Text + "','" + textBox4.Text + "','"+textBox5.Text+"',"+ 
       "" + comboBox1.Text + ", " + 
        " '" + comboBox6.Text + "','" + textBox7.Text + "' ,'" + textBox8.Text + "', '" + comboBox5.Text + "' "+ 
        ", @Photo)"; 


      OleDbComm.Parameters.AddWithValue("@Photo", pic); 
      OleDbComm.Parameters.AddWithValue("@Photo1", pic1); 

      OleDbConn.Open(); 
      int x = OleDbComm.ExecuteNonQuery(); 
      OleDbConn.Close(); 
      MessageBox.Show(x.ToString() + ": Record is Successfully Inserted"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     } 

//-Code für das Add Bild Taste 1

try 
     { 

      FileDialog fldlg = new OpenFileDialog(); 

      fldlg.Filter = "Image File (*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif"; 
      fldlg.Title = "Select Picture for The Agent."; 
      if (fldlg.ShowDialog() == DialogResult.OK) 
      { 
       imageName = fldlg.FileName; 
       Bitmap newimg = new Bitmap(imageName); 
       pictureBox1.Image = newimg; 

      } 

      fldlg = null; 

     } 

     catch (System.ArgumentException ae) 
     { 

      imageName = " "; 

      MessageBox.Show(ae.Message.ToString()); 

     } 

     catch (Exception ex) 
     { 

      MessageBox.Show(ex.Message.ToString()); 

     } 

// Cide fir button2 hinzufügen 2. Bild:

 try 
     { 

      FileDialog fldlg1 = new OpenFileDialog(); 

      fldlg1.Filter = "Image File (*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif"; 
      fldlg1.Title = "Select Flag For the Candidate party."; 
      if (fldlg1.ShowDialog() == DialogResult.OK) 
      { 
       imageName1 = fldlg1.FileName; 
       Bitmap newimg1 = new Bitmap(imageName1); 
       pictureBox2.Image = (Image)newimg1; 

      } 

      fldlg1 = null; 

     } 

     catch (System.ArgumentException ae) 
     { 

      imageName1 = " "; 

      MessageBox.Show(ae.Message.ToString()); 

     } 

     catch (Exception ex) 
     { 

      MessageBox.Show(ex.Message.ToString()); 

     } 
+0

Wo ist das zweite Bildfeld im obigen Code? Ich sehe nur einen für @photo. Abgesehen davon, was passiert, wenn Ihr Kandidat O'Brian ist? Und haben Sie schon einmal von Sql Injection gehört? – Steve

Antwort

1

Um sicher zu sein von SQL-Injection Verwendung parametrisierte Abfrage und manuell Objekt closing & disposing ADO.NET zu vermeiden. Verwenden Sie using Anweisung.

try{ 

     var pic = File.ReadAllBytes(imageName); 
     var pic1 = File.ReadAllBytes(imageName1); 

     using(OleDbConnection OleDbConn = new OleDbConnection(cs)){ 
      using(OleDbCommand OleDbComm = OleDbConn.CreateCommand()){ 
       //OleDbComm = OleDbConn.CreateCommand(); 
       OleDbComm.CommandText = "insert into candidateTB (pollingStationID,"+ 
             "candidateName,candidateCNIC,candidateCell,gender,"+ 
             "candidateEmail,address,description,candidateParty,"+ 
             "candidateImage) Values (" + 
             "@psid,@cname,@ccnic,@ccell,@gender,@email,@address,"+ 
             "@description,@cparty,@Photo)"; 

       OleDbComm.Parameters.AddWithValue("@psid",textBox2.Text); 
       OleDbComm.Parameters.AddWithValue("@cname",textBox3.Text); 
       OleDbComm.Parameters.AddWithValue("@ccnic",textBox4.Text); 
       OleDbComm.Parameters.AddWithValue("@ccell",textBox5.Text); 
       OleDbComm.Parameters.AddWithValue("@gender",comboBox1.Text); 
       OleDbComm.Parameters.AddWithValue("@email",comboBox6.Text); 
       OleDbComm.Parameters.AddWithValue("@address",textBox7.Text); 
       OleDbComm.Parameters.AddWithValue("@description",textBox8.Text); 
       OleDbComm.Parameters.AddWithValue("@cparty",comboBox5.Text); 
       OleDbComm.Parameters.AddWithValue("@Photo",pic); 
       //OleDbComm.Parameters.AddWithValue("@Photo1",pic1); I don't know from where it came, I don't see in the insert query. 

       OleDbConn.Open(); 
       int x = OleDbComm.ExecuteNonQuery(); 
       //OleDbConn.Close(); you don't need to close it, when the end of using statement is executed it will automatically be closed & disposed. 
       MessageBox.Show(x.ToString() + ": Record is Successfully Inserted"); 
      } 
     } 
} 
catch (Exception ex){ 
    MessageBox.Show(ex.Message); 
} 

Ich sehe einige seltsame Sachen in Ihrem Code. Wie Sie Wert von Email von ComboBox comboBox6 und den Parameter @Photo1 genommen haben. Ich glaube, du hast vergessen, es in insert query hinzuzufügen. Sie müssen sorgfältig überwachen.

+0

Überprüfen Sie Ihre Liste der Parameter Platzhalter. Du vermisst einen. – Steve

+0

Danke für das Aufzeigen. Es war ziemlich verwirrend mit all den Texten Zitate usw. – jonju

+0

gibt es einige Dinge falsch bei der Verwendung von Anweisungen, die ich dort sollte eine Anweisung verwenden. –