2017-01-08 4 views
1

Это мой Form1.cs кодУдаление из выпадающего списка и базы данных

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace VoetbalApp 
{ 
    public partial class VoetbalApp : Form 
{ 
    Administration admin = new Administration(); 

    public VoetbalApp() 
    { 
     InitializeComponent(); 

     LoadSpelers(); 
    } 


    public void LoadSpelers() 
    { 


     string filter = tbNaam.Text; 
     lbSpelers.Items.Clear(); 

     List<Speler> spelers = admin.GetAllSpelers(filter); 

     foreach (Speler s in spelers.Where(s => s.Name.Contains(filter))) 
     { 
      lbSpelers.Items.Add(s); 
     } 

    } 

    public bool ClubCorrect(string club) 
    { 

     if (club != "Unitas 59") 
     { 
      return false; 
     } 

     else 
     { 
      return true; 
     } 
    } 

    private void btAdd_Click(object sender, EventArgs e) 
    { 
     string spelerNaam = tbAddNaam.Text; 
     string spelerClub = tbAddClub.Text; 

     if (ClubCorrect(spelerClub)) 
     { 
      admin.AddSpeler(spelerNaam, spelerClub); 

      LoadSpelers(); 
     } 

     else 
     { 
      MessageBox.Show("De door u ingevoerde club is niet juist." 
       ); 
     } 
    } 

    private void btDelete_Click(object sender, EventArgs e) 
    { 
     int id; 
     Int32.TryParse(tbId.Text, out id); 

     bool verwijderenIsGelukt = admin.RemoveSpeler(id); 

     if (verwijderenIsGelukt) 
     { 
      LoadSpelers(); 
      MessageBox.Show("Speler met ID" + id + " is succesvol verwijderd."); 
      tbId.Text = ""; 
     } 

     else 
     { 
      MessageBox.Show("Er is iets mis gegaan bij het verwijderen van student met ID" + id + ".", "Verwijderen is mislukt.", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

    private void tbNaam_TextChanged(object sender , EventArgs e) 
    { 
     LoadSpelers(); 
    } 

    private void tbNaam_TextChanged_1(object sender, EventArgs e) 
    { 
     LoadSpelers(); 
    } 


} 
} 

И мой второй код Administration.cs

using System.Collections.Generic; 
using System.Data; 

// For SQL server operations 
using System.Data.SqlClient; 
using System.Windows.Forms; 

namespace VoetbalApp 
{ 

class Administration 
{ 


    public static string connectionString = @"Initial Catalog=Speler.mdf;Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + Application.StartupPath + @"\Speler.mdf;Integrated Security=True"; 
    public SqlConnection conn = new SqlConnection(connectionString); 






    List<Speler> spelers = new List<Speler>(); 


    /// <param name="name">De naam van de nieuwe speler.</param> 
    /// <param name="club">De club van de nieuwe speler.</param> 
    /// 


    public void AddSpeler(string name, string club) 
    { 

      conn.Open(); 
      Speler speler = new Speler(); 
      speler.Name = name; 
      speler.Club = club; 
      string query = @"INSERT INTO Speler (Name, Club) OUTPUT Inserted.ID 
       VALUES (@name, @club)"; 
      SqlCommand cmd = new SqlCommand(query, conn); 
      cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = speler.Name; 
      cmd.Parameters.Add("@club", SqlDbType.NVarChar).Value = speler.Club; 
      speler.ID = (int)cmd.ExecuteScalar(); 
      conn.Close(); 


    } 





    /// <param name="ID">Het ID van de speler die verwijderd moet worden.</param> 
    /// <returns>Geeft true terug bij succes, en anders false.</returns> 
    public bool RemoveSpeler(int ID) 
    { 
     int nrOfRowsAffected = 0; 


     conn.Open(); 
      foreach (Speler s in spelers) 
      { 

       if (s.ID == ID) 
       { 

        string query = "DELETE FROM Speler WHERE ID = " + ID; 
        SqlCommand cmd = new SqlCommand(query, conn); 


        nrOfRowsAffected = cmd.ExecuteNonQuery(); 
        spelers.Remove(s); 


        break; 
       } 
      } 


     conn.Close(); 
     return nrOfRowsAffected > 0; 
    } 


    /// <param name="filter">De filter is om spelers te zoeken van de database.</param> 
    /// <returns>Een lijst van spelers waarvoor de filter is toegepast.</returns> 
    public List<Speler> GetAllSpelers(string filter) 
    { 



     spelers = new List<Speler>(); 


     string query = "SELECT S.* FROM Speler S"; 



     if (filter != "") 
     { 
      query += " WHERE Name LIKE '%" + filter + "%' OR Club LIKE '%" + filter + "%'"; 
     } 



     conn.Open(); 
     SqlCommand cmd = new SqlCommand(query, conn); 


     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 

       Speler speler = new Speler(); 


       speler.ID = reader.GetInt32(0); 
       speler.Name = reader.GetString(1); 
       speler.Club = reader.GetString(2); 


       spelers.Add(speler); 
      } 
     } 


     conn.Close(); 
     return spelers; 

    } 
} 
} 

Так вопрос на RemoveSpeler в administration.cs и btDelete в виде1.cs. Спасибо, что нашли время.
У меня в основном код в моем сообщении, поэтому мне нужно добавить более подробную информацию или я не могу опубликовать его так. Итак, я хочу, чтобы у меня есть текстовое поле (tbID), где мне нужно поставить номер ID Speler, а затем нажмите кнопку (btDelete), чтобы удалить Speler с введенным идентификатором i из списка/базы данных. Но по какой-то причине он просто ничего не делает, никакой ошибки или чего-то еще. И этого все еще недостаточно, поэтому я все еще не могу опубликовать его, поэтому мне просто нужно набрать больше материала здесь, я не знаю, что еще набрать здесь.

+0

Ваша первая строка кода не была в сером цвете, потому что она должна начинаться с четырех последовательных пробелов, чтобы считаться частью кода. –

+0

Кроме того, вы должны использовать параметры вместо конкатенации строк для создания своих операторов sql. Читайте о SQL Injection. –

+0

Удалено ли 'speler' из списка? –

ответ

1
using System; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace WindowsFormsApplication1 
{ 
    public static class admin 
    { 
     public static bool RemoveSpeller(int id, ListBox listbox) 
     { 

      if (listbox.Items.Contains(id.ToString())) 
      { 
       MessageBox.Show("Exists"); 
       listbox.Items.Remove(id.ToString()); 
       try 
       { 

        SqlConnection con = new SqlConnection(/*Connection string goes here*/); 

        con.Open(); 
        SqlCommand com = new SqlCommand("DELETE FROM Speler WHERE id = '" + id + "'", con); 

        com.ExecuteNonQuery(); 

        con.Close(); 
        return true; 

       } 
       catch (SqlException) 
       { 
        MessageBox.Show("Something went wrong while removing the item"); 
        return false; 

       } 
      } 
      else 
      { 
       MessageBox.Show("Wasn't found!"); 
       return false; 
      } 


     } 
    } 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private void button1_Click(object sender, EventArgs e) 
     { 

      admin.RemoveSpeller(Convert.ToInt16(tbId.Text), yourlistboxname); 

     } 
    } 
} 
+1

Функция возвращает значение bool 'return nrOfRowsAffected> 0;' под вопросом. –

+0

У меня есть мой первый код в другом классе, поэтому я, когда я пытаюсь выполнить код и помещаю код RemoveFromDataBase в свой другой класс, и button1_click в моем основном коде Это дает мне ошибку в (listbox.Items.IndexOf (** id * *))); В этом контексте имя «id» не существует, а другое - в if (** rowsaffected ** == 1), и оно дает ту же ошибку, что и идентификатор. –

+0

Хорошо, я отделил код для каждого класса! Переименуйте везде, где он говорит Class1 с вашим классом, а также все элементы управления с вашими именами элементов управления! – HelloIT

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