Lokalna baza danych i niemożność dodania rekordu

0

Witam. Posiadam aplikację C# z lokalną bazą danych (stworzoną w visual studio). Po przeciągnięciu tabeli z data sources na formularz wszystko działa bez zarzutu. Chcę jednak, by w celu dodania nowego rekordu, wyskakiwał formularz z textboxami. Przygotowałem formularz i napisałem trochę kodu. Po zaakceptowaniu danych nie pokazują się one jednak w tabeli.

BJDataBaseDataSet.KomendyRow row = bJDataBaseDataSet.Komendy.NewKomendyRow();
row.ID = (bJDataBaseDataSet.Komendy.Count + 1);
row.Nazwa_Komendy = nazwaKomendy.Text;

try
{
      bJDataBaseDataSet.Komendy.Rows.Add(row);
}
catch (System.Data.NoNullAllowedException)
{
      MessageBox.Show("Uzupełnij dane!");
}

W formularzu, który wywołuje okno do wprowadzenia danych aktualizuję tabelę:

komendyTableAdapter.Update(this.bJDataBaseDataSet.Komendy);

Pojęcia nie mam, co może być nie tak. Dodam tylko, że pierwszy raz piszę aplikację z bazą danych, więc zapewne diabeł tkwi w szczególe. Albo po prostu kompletnie wszystko pokopałem ;)

dodanie znaczników <code class="csharp"> - @furious programming

0

Jaki .NET, jakie VS, czemu używasz datasetów?

0

Visual 2013 Pro (dreamspark), a dataset'y... Tak jak wspomniałem - to moja pierwsza apka z bazą danych - sposób dodawania wierszy wziąłem z przykładu z MSDN.

--EDIT--
W pewnym stopniu poradziłem już sobie z problemem. Na główny formularz przeciągam z data sources tabelę, zaznaczając w comboBox (przy danej tabeli) - DataGridView. Z BindingNavigator usuwam niepotrzebne przyciski i dodaję jeden własny, który wyświetla nową formatkę. Na nią z kolei przeciągam tę samą tabelę, ale z zaznaczoną (w comboBox) opcją Details. Znów pojawia się BindingNavigator, z którego tym razem usuwam wszystkie przyciski z wyjątkiem SAVE, a kontrolki z Details układam według własnego widzimisię.

Jednak w momencie, kiedy z głównego okna chcę wyświetlić (przyciskiem) formatkę do wprowadzenia danych - ta pojawia się na ułamek sekundy i znika. Co może być tego przyczyną?

--EDIT--
w/w problem już rozwiązałem - okno otwiera się i zamyka po naciśnięciu zapisz. Dane jednak dalej się nie aktualizują -_-

0

Ok. Z interfejsem się uporałem, dane do pewnego stopnia są aktualizowane. Pojawił się inny problem. W bazie danych mam tabelę Psy (z kluczem głównym Id), oraz obce klucze z tabel GrupySzkoleniowe i Właściciele (gdzie kluczami głównymi również są Id). Na formatce te dane pobierane są z textboxów (ukrytych), do których użytkownik wprowadza wartość poprzez Comboboxy (bindowane z tabelami Wlasciciele, oraz GrupySzkoleniowe). Kiedy zaznaczam pierwszy rekord (w Combobox) - jest OK, ale w momencie kiedy wybieram drugi, pojawia się wyjątek NullReferenceException (Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu). Dane w tabeli na pewno się znajdują (wprowadziłem testowe "na sztywno"). Co może być przyczyną?

Wyjątek jednak rzuca tylko ComboBox bindowany z tabelą Właściciele, nawet jeśli wartości zmieniam ComboBox od Grup

1

Polecam uruchomienie programu z debuggerem, jak wyskoczy exception to zapauzuj debugger i sobacz na ktorej linijce sie wypierniczylo, potem sprawdz co jest nullem i dlaczego

0

Wyniknęło z tego, że po zmianie wartości w combobox, właściwość SelectedValue ustawiana jest na NULL, więc zamiast SelectedValue, pobrałem ValueMember i wyjątek zniknął.

--EDIT-- rozwiązanie bezsensowne... Nie wiem dlaczego tak zrobiłem. Wracam do punktu wyjścia - NullReferenceException. W bloku catch wyświetliłem sobie MessageBox, po naciśnięciu OK, wartość zostaje prawidłowo dopisana, program jednak mimo wszystko się zamyka rzucając wyjątek ConstraintException (metoda Application.Run(new Form1()) w klasie Program.cs) - niestety trudno mi rozczytać log

0

Problem rozwiązany. Wykorzystałem MySQL i ADO.NET

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