Witam.
Żeby nie zakładać nowego tematu bo problem jest podobny opisze tutaj mój problem.
Napisałem taką metodę:
public void dodaj()
{
int cos;
OleDbConnection conn = new OleDbConnection(BazaDanych.GetPolaczenie());
conn.Open();
string zapytanie = "insert into Ksiazka values(default, @tytul, @autor, " +
"@wydawnictwo, @miejsce_wydania, @nr_wydania, @ISBN, @rok_wydania, " +
"@liczba_stron, @format_ksiazki, @znak_miejsca, @znak_UKD, " +
"@hasla_przedniotowe, @podtytul, @tlumaczenie, @ilustracje, " +
"@dokumenty, @cena, @seria, @uwagi)";
OleDbCommand cmd = new OleDbCommand(zapytanie, conn);
cmd.Parameters.AddWithValue("@tytul", _tytul);
cmd.Parameters.AddWithValue("@autor", _autor);
cmd.Parameters.AddWithValue("@wydawnictwo", _wydawnictwo);
cmd.Parameters.AddWithValue("@miejsce_wydania", _miejsceWydania);
cmd.Parameters.AddWithValue("@nr_wydania", _nrWydania);
cmd.Parameters.AddWithValue("@ISBN", _isbn);
cmd.Parameters.AddWithValue("@rok_wydania", _rokWydania);
cmd.Parameters.AddWithValue("@liczba_stron", _liczbaStron);
cmd.Parameters.AddWithValue("@format_ksiazki", _formatKsiazki);
cmd.Parameters.AddWithValue("@znak_miejsca", _znakMiejsca);
cmd.Parameters.AddWithValue("@znak_UKD", _znakUKD);
cmd.Parameters.AddWithValue("@hasla_przedniotowe", _haslaPrzedmiotowe);
cmd.Parameters.AddWithValue("@podtytul", _podtytul);
cmd.Parameters.AddWithValue("@tlumaczenie", _tlumaczenie);
cmd.Parameters.AddWithValue("@ilustracje", _ilustracje);
cmd.Parameters.AddWithValue("@dokumenty", _dokumenty);
cmd.Parameters.AddWithValue("@cena", _cena);
cmd.Parameters.AddWithValue("@seria", _seria);
cmd.Parameters.AddWithValue("@uwagi", _uwagi);
cos = cmd.ExecuteNonQuery();
conn.Close();
}
Ale nie chce działać. Wywala mi że "Nie podano wartości dla jednego lub kilku wymaganych parametrów." Wiem, że chodzi wartość default, czyli pierwszy atrybut tabeli gdzie występuje autonumerowanie. Przy MySql powinno to działać ale przy access nie chce. Próbowałem tam juz wpisywać (null; '') ale nadal nic, więc poszukałem i znalazłem ten temat. Zmieniłem metodę tak:
public void dodaj()
{
int cos;
OleDbConnection conn = new OleDbConnection(BazaDanych.GetPolaczenie());
conn.Open();
string zapytanie = "insert into Ksiazka(Tytul, Autor, " +
"Wydawnictwo, Miejsce_wydania, Nr_wydania, ISBN, Rok_wydania, " +
"Liczba_stron, Format_ksiazki, Znak_miejsca, Znak_UKD, " +
"Hasla_przedmiowowe, Podtytul, Tlumaczenie, Ilustracje, " +
"Dokumenty, Cena, Seria, Uwagi) " +
"values(default, @tytul, @autor, " +
"@wydawnictwo, @miejsce_wydania, @nr_wydania, @ISBN, @rok_wydania, " +
"@liczba_stron, @format_ksiazki, @znak_miejsca, @znak_UKD, " +
"@hasla_przedniotowe, @podtytul, @tlumaczenie, @ilustracje, " +
"@dokumenty, @cena, @seria, @uwagi)";
cmd.Parameters.AddWithValue("@tytul", _tytul);
cmd.Parameters.AddWithValue("@autor", _autor);
cmd.Parameters.AddWithValue("@wydawnictwo", _wydawnictwo);
cmd.Parameters.AddWithValue("@miejsce_wydania", _miejsceWydania);
cmd.Parameters.AddWithValue("@nr_wydania", _nrWydania);
cmd.Parameters.AddWithValue("@ISBN", _isbn);
cmd.Parameters.AddWithValue("@rok_wydania", _rokWydania);
cmd.Parameters.AddWithValue("@liczba_stron", _liczbaStron);
cmd.Parameters.AddWithValue("@format_ksiazki", _formatKsiazki);
cmd.Parameters.AddWithValue("@znak_miejsca", _znakMiejsca);
cmd.Parameters.AddWithValue("@znak_UKD", _znakUKD);
cmd.Parameters.AddWithValue("@hasla_przedniotowe", _haslaPrzedmiotowe);
cmd.Parameters.AddWithValue("@podtytul", _podtytul);
cmd.Parameters.AddWithValue("@tlumaczenie", _tlumaczenie);
cmd.Parameters.AddWithValue("@ilustracje", _ilustracje);
cmd.Parameters.AddWithValue("@dokumenty", _dokumenty);
cmd.Parameters.AddWithValue("@cena", _cena);
cmd.Parameters.AddWithValue("@seria", _seria);
cmd.Parameters.AddWithValue("@uwagi", _uwagi);
cos = cmd.ExecuteNonQuery();
conn.Close();
}
Czyli wypisałem atrybuty tabeli i pominołem pierwszy atrybut autonumerowania (Nr_egzemparza) i teraz mi wywala "Liczba wartości kwerendy i liczba pól docelowych nie są takie same." czyli rozumiem, że liczba atrubutów(pól) w zapytaniu jest rózna od liczby atrybutów(pól) w tabeli. Hmmm niby logiczne tylko dlaczego kolegom wyżej tak działa? Dodam, że jeśli za Default wpisałem daną liczbę, przyjoł to poprawnie.
Proszę o pomoc.