nie umieszczanie elementu u bazie danych (System.Data.OleDb)

0

Stworzyłem taki kod:

public static void DodajWydawnictwo(string przeslanaNazwa)
{
    OleDbConnection polaczenie = new OleDbConnection(DajSciezkeDoPolaczenia());
    polaczenie.Open();
    string zapytanie = "insert into Wydawnictwa (nazwa) values (@nazwa)";
    using (OleDbCommand komenda = new OleDbCommand(zapytanie, polaczenie))
    {
        komenda.Parameters.AddWithValue("@nazwa", przeslanaNazwa);
        int rezultat = komenda.ExecuteNonQuery();
        if (rezultat == 1) MessageBox.Show("Udało się dadać do bazy danych: " + przeslanaNazwa);
        else MessageBox.Show("Błąd. Skontaktuj się z administratorem w celu wyjaśnienia sytuacji");
    }
    polaczenie.Close();
}

i taką baze w access:
baza danych

Powinien zapisać nowy element do bazy i automatycznie przypisać mu ID lecz w ogóle się nie zapisuje.
ExecuteNonQuery() zwraca 1 więc hipotetycznie powinno być wszystko w porządku.
Pytanie co robię źle. Jak to zrobić dobrze. Dopiero zaczynam więc przyjmę konstruktywną krytykę :)

2

Jeżeli executeNonQuery() zwraca 1 to jest to informacja o zmodyfikowanym/dodanej ilości wierszy (zależnie od komendy), więc nie ma siły by coś poszło źle. A gdzie masz plik bazy ? Być może dałeś plik bazy jako resource do projektu. I tak w zasadzie kod wykonuje się prawidłowo, tylko np. ta baza znajduje się w folderze bin/debug. I tam widoczne są zmiany, a nie w tej której Ty otwierasz.

0

No tak. Wszystko działało poprawnie tylko zamiast sprawdzać baze w folderze bin sprawdzałem kopie którą nie wiem po co utworzyłem w innym folderze.
Dziękuje serdecznie :)

PS. Czy merytorycznie poprawnie dodaje elementy do bazy czy da się to zrobić lepiej?

0

A takie pytanko, skoro wiesz jak działa using to czemu nie wrzucisz OleDbConnection do niego?

0

W zasadzie dopiero się uczę i nie bardzo wiem jak bym miał to zrobić... pomożesz ? :)

3

Witam,

To może od razu skup się na tym by nazwy zmiennych i metod były po angielsku i zaprzyjaźnij się ze słowem kluczowym "using".

using(var connection = new OleDbConnection("connection string"))
{
    connection.Open();
    using(var command = connection.CreateCommand())
    {
        command.CommandText = "INSERT INTO publisher (name) VALUES (@name)";
        command..Parameters.AddWithValue("@name", "value");
        int result = command.ExecuteNonQuery();
        //do something with result
    }
}

Pozdrawiam,

mr-owl

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