Ethan
Ethan

Reputation: 3

How Do I Populate Text Boxes With Sql Database Data Using One Combo Box

Hey everyone pretty new to SQL Database functions but have been coding in c# for about a year now still not that great at it but I'm getting there!

I'm currently creating a football application and to Edit players and Matches i was wanting to use one drop down combo box to retrieve data from an SQL database which then would populate other text boxes and combo boxes. I've had a go at it myself but don't know where i'm going wrong.

On form load my connection opens i populate my datasets and i execute this method to populate my combobox

private void Navigate()
{
   string showPlayers = "SELECT * From Add_Players";
   SqlCommand cmdData = new SqlCommand(showPlayers, conn);
   SqlDataReader myReader = cmdData.ExecuteReader();

   while (myReader.Read())
   {
      comboEditPlayer.Items.Add(myReader[0]);
   }
   conn.Close();
}

After which in the combo box selected index changed method i have this code

private void comboEditPlayer_SelectedIndexChanged(object sender, EventArgs e)
{
   try
   {
      conn.Open();
      string showPlayers = "SELECT * From Add_Players WHERE Player_ID ='" 
      + comboEditPlayer + "'   ;";
      SqlCommand cmdData = new SqlCommand(showPlayers, conn);
      SqlDataReader myReader = cmdData.ExecuteReader();

      while (myReader.Read())
      {
         comboEditPlayerPos.Items.Add(myReader[1]);
         txtEditPlayerName.Text = myReader[2].ToString();
         txtEditPlayerSecond.Text = myReader[3].ToString();
         comboEditPlayerStatus.Items.Add(myReader[4]);
      }
      conn.Close();
      conn.Dispose();
   } 
   catch (Exception comboFail)
   {
      MessageBox.Show(comboFail.ToString());
   }
}

I've been told this code is open and i need to use parameterized queries for preventing hacker attempts which i have started but do not know what Parameter i should be adding to the code i have for this is below

private void comboEditPlayer_SelectedIndexChanged(object sender, EventArgs e)
{
   string connectionString =
      ZimbFootball.Properties.Settings.Default.Football2ConnectionString;
   using (SqlConnection connection = new SqlConnection (connectionString))
   {
      connection.Open();

      using (SqlCommand command = new SqlCommand(
               "SELECT * From Add_Players WHERE Player_ID =" 
               + comboEditPlayer.SelectedValue + "", connection))
      {
         command.Parameters.Add(new SqlParameter ("",));
      }
   }
}

All help is appreciated and please go easy on me :P

Upvotes: 0

Views: 3367

Answers (1)

Steve
Steve

Reputation: 216353

You could add a parameter to the collection with the value of your ComboBox, then execute the query and read back the values from the reader

private void comboEditPlayer_SelectedIndexChanged(object sender, EventArgs e)
{
      string connectionString =
          ZimbFootball.Properties.Settings.Default.Football2ConnectionString;
      using (SqlConnection connection = new SqlConnection (connectionString))
      using (SqlCommand command = new SqlCommand(
                    "SELECT * From Add_Players WHERE Player_ID =@id", connection))
      {
          connection.Open();
          command.Parameters.AddWithValue("@id", comboEditPlayer.Text);
          using(SqlDataReader myReader = command.ExecuteReader())
          {
              while (myReader.Read())
              {
                    comboEditPlayerPos.Items.Add(myReader[1]);
                    txtEditPlayerName.Text = myReader[2].ToString();
                    txtEditPlayerSecond.Text = myReader[3].ToString();
                    comboEditPlayerStatus.Items.Add(myReader[4]);
              }
          }
       }
 }

Upvotes: 2

Related Questions