2016-08-09 1 views
-1

Я новичок в Stackoverflow, но я постараюсь изо всех сил передать мою проблему как можно яснее, и вы можете спросить меня, если вы смущены или не поняли!Как вставить два поля изображения в базу данных доступа MS, используя C#?

Мой код работает, но я хочу, чтобы кто-то предложил мне профессиональный и эффективный код с одинаковой функциональностью.

Мой код - все данные о вставке в таблице доступа к базе данных MS, которые имеют два поля изображения.

Заранее спасибо

Вот мой код:

// Код на вставки кнопки мыши событие

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); 
     } 

     } 

// Код для кнопки добавить изображение 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 добавить 2-е изображение:

 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

Где находится второе картирование в коде выше? Я вижу только один для @photo. Помимо этого, что произойдет, если вы кандидат имя O'Brian? и, наконец, вы когда-нибудь слышали о Sql Injection? – Steve

ответ

1

Чтобы обезопасить себя от Sql Injection использования параметризованного запроса и избежать вручную closing & disposing объект ADO.NET. используйте заявление using.

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); 
} 

Я вижу в вашем коде некоторые странные вещи. Например, вы принимали значение Email от ComboBox comboBox6 и параметр @Photo1. Я думаю, вы забыли добавить его в insert query. Вам нужно внимательно следить.

+0

Проверьте свой список параметров заполнителей. Вам не хватает одного. – Steve

+0

Спасибо за указание. Это было довольно запутанно со всеми этими цитатами из текста и т. Д. И т. Д. – jonju

+0

есть некоторые вещи, которые неправильно используются при использовании утверждений. Я должен там использовать инструкцию. –