Dodawanie danych z comboboxa do bazy danych

0

Witajcie.

Od nie dawna bawię się z WPF. Próbuję zrobić formularz , który wypełniałby odpowiednią tabelę w bazie danych. W moim formularzu mam 2 comboboxy , które wypełniane są danymi z innej tabeli z bazy. O ile z wypełnieniem comboboxa danymi nie mam problemów to z dodaniem tego do bazy już tak...

        <StackPanel HorizontalAlignment="Right" Height="625" Margin="0,65,0,0" VerticalAlignment="Top" Width="492">
           
            <Label x:Name="lbl1" Margin="0,0,350,0" Visibility="Hidden"/>
            <Label Content="Kod ID" Margin="30,40,0,0"/>            
            
            <Label Content="Nazwa produktu" Margin="30,20,0,0" />
            <TextBox x:Name="tbNazwa" Width="250" Height="22" Margin="150,-30,0,0"/>
            
            <Label Content="Producent" Margin="30,20,0,0"/>
            <TextBox x:Name="tbProducent" Width="250" Height="22" Margin="150,-30,0,0"/>
            
            <Label Content="Grupa towarowa" Margin="30,20,0,0"/>            
            <ComboBox x:Name="cbGrupa" Height="22" Width="250" Margin="150,-30,0,0" ItemsSource="{Binding}"/>
            
            <Label Content="Dostawca" Margin="30,20,0,0"/>
            <ComboBox x:Name="cbDostawca" Height="22" Width="250" Margin="150,-30,0,0" ItemsSource="{Binding}" />
            
           
            <Button x:Name="btnDodaj" Height="30" Width="200" Content="Dodaj do bazy" Margin="0,-30,30,0" HorizontalAlignment="Right" Click="btnDodaj_Click"/>
            

        </StackPanel>

Uzupełnianie comboboxa.

public void Dostawca(ComboBox cbDostawca)
        {
             polaczenie.Open();

                SqlCommand cmd = new SqlCommand("SELECT ID,Nazwa FROM dostawca", polaczenie);
                SqlDataAdapter Da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();

                Da.Fill(ds,"dostawca");
                cbDostawca.ItemsSource = ds.Tables[0].DefaultView;
                cbDostawca.DisplayMemberPath = ds.Tables[0].Columns["Nazwa"].ToString();
                cbDostawca.SelectedValuePath = ds.Tables[0].Columns["ID"].ToString();
                polaczenie.Close();
        } 

Dodawanie do bazy :

private void btnDodaj_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                polaczenie.Open();
                

                SqlCommand dodajdane = new SqlCommand("INSERT INTO produkt_dane values (@ID,@Nazwa, @Producent,@DostawcaID,@GrupaID)", polaczenie);
                dodajdane.Parameters.AddWithValue("@ID", tbID.Text);
                dodajdane.Parameters.AddWithValue("@Nazwa", tbNazwa.Text);
                dodajdane.Parameters.AddWithValue("@Producent", tbProducent.Text);
                dodajdane.Parameters.AddWithValue("@DostawcaID", cbDostawca.SelectedValuePath);
                dodajdane.Parameters.AddWithValue("@GrupaID", cbGrupa.SelectedValuePath);
                dodajdane.ExecuteNonQuery();


            }
            catch (SqlException wyjatek)
            {
                MessageBox.Show(wyjatek.ToString());
            }
            finally
            {
                polaczenie.Close();
            }
        } 

Błąd , który mi wyrzuca to :

Conversion failed when converting the nvarchar value 'ID' to data type ine
0

ID musi być liczbą.

0

Postanowiłem napisać prosty kod żeby sprawdzić czy w ogóle mój combobox dobre dane przekazuje.

 MessageBox.Show("Wybrano - " + cbDostawca.Text + ". Jego ID to - " + cbDostawca.SelectedValuePath.ToString() + "\n Produkt należy do grupy - " + cbGrupa.Text + ". Jej ID to - " + cbDostawca.SelectedValuePath.ToString());

Okazało się, że zamiast ID z bazy przekazywany jest wyraz "ID".
Aby to naprawić zmieniłem

.SelectedValuePath.ToString() 

na

 .SelectedValue.ToString()

Do messageboxa dane są przekazywane prawidłowo. Aczkolwiek gdy w próbuje dodać rekord do bazy to występuję błąd. Tym razem :

The INSERT statement conflicted with the FOREIGN KEY constraint " FK_produkt_dane_produkt". The conflict occured in database "Testowa", table "dbo.produkt", column 'ID'
1

A co to za FK jest?
Chyba u ciebie jest tak że jakaś kolumna z dane_produkt ma FK na Id z produkt. W takim wypadku najpierw musisz zrobić inserta w produkt

0

Miałeś rację. Wygląda na to , że pogubiłem się w kluczach... Usunąłem kłopotliwy klucz i jest ok. Dziękuję za pomoc.

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