INSERT do bazy wybranego elementu z comboBox'a

0

INSERT do bazy wybranego elementu z comboBox'a 21.01.2009 (Śr) 13:40
Witam. Mam pewien problem. Mam dwie tabele:

drużyny:
id_druzyny | nazwa | trener | trener2 | kierownik | masazysta --->(id_druzyny - klucz główny - auto numeracja)

i tabele zawodnicy:
id_zawodnika | id_druzyny | numer | imie | nazwisko | pozycja --->(id_zawodnika - klucz główny - auto numeracja)
--->(id_zawodnika - klucz obcy)

Chcę dodać do tabeli zawodnicy zawodników, przypisując ich przy tym do odpowiedniej drużyny, utworzonej już wcześniej.

Na formatce wybieram z comboBox'a drużynę, do której chcę dodać zawodnika, w textBox'y wpisuję odpowiednie dane i buttonem dodaję dane do tabeli. Problem polega na tym, że chcę aby w tabeli zawodnicy w kolumnie id_druzyny znalazła sie wartość id_druzyny z tabeli druzyny dla wybranej druzyny z comboBox'a.

Oto zapytanie które utworzyłem:

[Kod SQL]
string insertQuery = @" INSERT INTO zawodnicy
(ID_Druzyny,
numer,
imie,
nazwisko,
pozycja)
VALUES('" + //????// + "',
'" + textBox1.Text + "',
'" + textBox2.Text + "',
'" + textBox3.Text + "',
'" + textBox4.Text + "')";

Jak odwołać się do tabeli druzyny zeby pobrac wartość id_dryżyny z wybranego comboBox'a? Co powinno znaleźć się w miejscu //????// ?

Mam nadzieję, że w miarę wiadomo o co mi chodzi.

Będę wdzięczny za pomoc.

0

Po pierwsze, zamiast kleic string polecenia SQL, poczytaj o parametryowanych zapytaniach (parametrized query).

Po drugie, kiedy ladujesz liste nazw do combobox'a, jednoczesnie z kazdym itemem wiaz ID. Po wyborze, zamiast odczytywac z combobox'a nazwe i pobierac dla niej ID druzyny, by wstawic do nowego zapytania, pobieraj ID powiazane z itemem i uzywaj go jako kolejnego parametru w twoim INSERT.

0

a jak powiązać po wczytaniu nazw do combobox'a ID_druzyny ze zmienna/itemem ?

a więc rozwiązanie by wyglądało w taki sposób:

deklaruje zmienną

[Kod C#]

int id_team;

do comboBox'a wczytywane są nazwy drużyn które znajdują się w bazie

[Kod C#]

private void Players_Load(object sender, EventArgs e)
{
   //wczytywanie drużyn które wyświetlają się w comboBoxie
}

i teraz podczas wyboru danej drużyny z comboBox'a do zmiennej int id_team chciałbym przypisać wartość ID_Druzyny z tabeli drużyny
a więc musi to być zrobione w

[Kod C#]

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // id_team=ID_Druzyny która została wybrana w comboBoxie
}

no i na końcu moją zmienną id_team przypisuje do danego zawodnika którego dodaję do bazy

[Kod C#]

  private void button1_Click(object sender, EventArgs e)
{
  string insertQuery = @" INSERT INTO zawodnicy
                                           (ID_Druzyny
                                            numer,
                                            imie,
                                            nazwisko,
                                            pozycja)
                        VALUES('"+ id_team +"',                // <--- moja zmienna id_team
                               '" + textBox1.Text + "',
                               '" + textBox2.Text + "',
                               '" + textBox3.Text + "',
                               '" + comboBox1.Text + "')";

}

czy takie rozwiązanie byłoby dobre?

no i jak zrobić żeby właśnie id_team=ID_Druzyny która została wybrana w comboBoxie ?

0
private void Players_Load(object sender, EventArgs e)
{
    //wczytywanie drużyn które wyświetlają się w comboBoxie
    DataTable druzyny = new DataTable();
    using(SqlDataAdapter da = new SqlDataAdapter("SELECT id, nazwa FROM druzyny", polaczenie))
    {
        da.Fill(druzyny);
    }
    comboBoxDruzyny.DisplayMember = "nazwa";
    comboBoxDruzyny.ValueMember = "id";
    comboBoxDruzyny.DataSource = druzyny;
}

private void button1_Click(object sender, EventArgs e)
{
    SqlCommand command = new SqlCommand(
       "INSERT INTO zawodnicy(ID_Druzyny, numer, imie, nazwisko, pozycja) "+
       "VALUES(@id, @numer, @imie, @nazwisko, @pozycja)", polaczenie);
    command.Parameters["@id"] = comboBoxDruzyny.SelectdValue;
    command.Parameters["@numer"] = textBox1.Text;
    command.Parameters["@imie"] = textBox2.Text;
    command.Parameters["@nazwisko"] = textBox3.Text;
    command.Parameters["@pozycja"] = comboBox1.Text;
    command.ExecuteNonQuery();
}
0

dzieki adf88 prawie wszystko ok tylko ze przy przypisywaniu parametrów do bazy wyskakuja mi takie bledy:

command.Parameters["@id"] = comboBoxDruzyny.SelectdValue;

Cannot implicitly convert type 'object' to 'System.Data.SqlClient.SqlParameter'. An explicit conversion exists (are you missing a cast?)

a przy tych przypisaniach:

 command.Parameters["@numer"] = textBox1.Text;
    command.Parameters["@imie"] = textBox2.Text;
    command.Parameters["@nazwisko"] = textBox3.Text;
    command.Parameters["@pozycja"] = comboBox1.Text;

takie bledy:

Cannot implicitly convert type 'string' to 'System.Data.SqlClient.SqlParameter'

id w bazie to typ int
natomiast numer, imie, nazwisko i pozycja zostały zadeklarowane w bazie jako nvarchar(50)

0

command.Parameters.AddWithValue("@nUmer", textBox1.Text); ...

0

zgadza się ;-) właśnie tak zrobiłem.

Dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1