• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Sprawdzenie czy dany rekord istnieje

0 głosów
844 wizyt
pytanie zadane 28 lipca 2018 w C# przez Cacu003 Początkujący (260 p.)

Mianowicie pojawia mi się błąd podczas sprawdzania że: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu

I pojawia się tu

            int zmienna = (int)Komenda.ExecuteScalar();

A tu zamieszczam resztę kodu

        private void button1_Click(object sender, EventArgs e)
        {

            polaczenie.Open();
            Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
            zapytanieSQL = "select count(Imie, Nazwisko) from pracownicy where Imie = '" + imie.Text + "' and '" + nazwisko.Text + "'";
            Komenda.ExecuteScalar();
            int zmienna = (int)Komenda.ExecuteScalar();
            if (zmienna > 0)
            { 
             DialogResult dr = MessageBox.Show("Dodawanie", "Osoba o danym imieniu i nazwisku już istnieje, czy chcesz dodać pracownika?", MessageBoxButtons.YesNo);

                if (dr == DialogResult.Yes)
                {
                    zapytanieSQL = string.Format("insert into pracownicy(Imie, Nazwisko, Ojca, Matki, DataUrodzenia, MiejsceUrodzenia, Kraj, Wydzial, TypWizy, NrWizy, WizaOd, WizaDo, TypPaszportu, NrPaszportu, PaszportOd, PaszportDo, Oswiadczenie, Firma, OswiadczenieOd, OswiadczenieDo, Zatrudnienie, Status, Umowa, Uwagi) values ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}', '{14}', '{15}', '{16}', '{17}', '{18}', '{19}', '{20}', '{21}', '{22}', '{23}')", imie.Text, nazwisko.Text, ojca.Text, matki.Text, dataurodzenia.Text, miejsce.Text, kraj.Text, wydzial.Text, typwizy.Text, nrwizy.Text, wizaod.Text, wizado.Text, typpaszportu.Text, nrpaszportu.Text, paszportod.Text, paszportdo.Text, oswiadczenie.Text, firma.Text, oswiadczenieod.Text, oswiadczeniedo.Text, zatrudnienie.Text, status.Text, umowa.Text, uwagi.Text);

                    Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
                    Komenda.ExecuteNonQuery();
                    MessageBox.Show("Dodano pracownika.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else if (dr == DialogResult.No)
                {
                    
                }
            }
            if (zmienna == 0)
            {
                zapytanieSQL = string.Format("insert into pracownicy(Imie, Nazwisko, Ojca, Matki, DataUrodzenia, MiejsceUrodzenia, Kraj, Wydzial, TypWizy, NrWizy, WizaOd, WizaDo, TypPaszportu, NrPaszportu, PaszportOd, PaszportDo, Oswiadczenie, Firma, OswiadczenieOd, OswiadczenieDo, Zatrudnienie, Status, Umowa, Uwagi) values ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}', '{14}', '{15}', '{16}', '{17}', '{18}', '{19}', '{20}', '{21}', '{22}', '{23}')", imie.Text, nazwisko.Text, ojca.Text, matki.Text, dataurodzenia.Text, miejsce.Text, kraj.Text, wydzial.Text, typwizy.Text, nrwizy.Text, wizaod.Text, wizado.Text, typpaszportu.Text, nrpaszportu.Text, paszportod.Text, paszportdo.Text, oswiadczenie.Text, firma.Text, oswiadczenieod.Text, oswiadczeniedo.Text, zatrudnienie.Text, status.Text, umowa.Text, uwagi.Text);

                Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
                Komenda.ExecuteNonQuery();
                MessageBox.Show("Dodano nowego pracownika.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            polaczenie.Close();

            new Form2().Show();
            Close();
        }

Nie za bardzo wiem jak mam to poprawić i co tu jest źle. 

Proszę o pomoc

2 odpowiedzi

0 głosów
odpowiedź 11 sierpnia 2018 przez DrajzleR Obywatel (1,380 p.)
wybrane 12 sierpnia 2018 przez Cacu003
 
Najlepsza

Witam. Patrząc na kod nie masz czasami błędu w zapytaniu SQL?

Oryginalne zapytanie:

zapytanieSQL = "select count(Imie, Nazwisko) from pracownicy where Imie = '" + imie.Text + "' and '" + nazwisko.Text + "'";
    

Zmienione zapytanie:

zapytanieSQL = "select count(Imie, Nazwisko) from pracownicy where Imie = '" + imie.Text + "' and Nazwisko = '" + nazwisko.Text + "'";
    

Dodałem w warunku wyszukiwania dodatkową zmienną (strzelam że to Nazwisko - trzeba zmienić pod własne potrzeby) wygląda na to że dałeś and ale nie dodałeś kolejnego warunku.

 

Dodatkowo od nowszej wersji C# 6 można podawać zmienne do stringa w bardziej przejrzysty sposób
 

zapytanieSQL = $"select count(Imie, Nazwisko) from pracownicy where Imie = '{imie.Text}' and Nazwisko = '{nazwisko.Text}' ";

 

komentarz 12 sierpnia 2018 przez Cacu003 Początkujący (260 p.)

Tak, ogólnie samo zapytanie było źle skonstruowane. Dzięki że zwróciłeś mi uwagę iż nie napisałem parametru Nazwisko.

Jednakże pomimo poprawieniu tego zapytanie dalej jest złe. Poczytałem na oficjalnej stronie SQLite i okazuje się że po zapisaniu 

COUNT

w nawiasie nie umieszcza się nazw kolumn i z tego co wyczytałem trzeba to zapisać tak:

SELECT COUNT(*) FROM NazwaTabeli WHERE NKolumny = "wartość"

Ogólnie okazało się to banalnie proste.

Dziękuję za pomoc :)

0 głosów
odpowiedź 28 lipca 2018 przez sonquer Gaduła (4,280 p.)

Zamiast:

Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
    zapytanieSQL = "select count(Imie, Nazwisko) from pracownicy where Imie = '" + imie.Text + "' and '" + nazwisko.Text + "'";


Spróbuj:
 

zapytanieSQL = "select count(Imie, Nazwisko) from pracownicy where Imie = '" + imie.Text + "' and '" + nazwisko.Text + "'";
Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);

I pamiętaj, kod wykonuje się od góry do dołu.
Poczytaj może jeszcze o Entity framework albo string.Format wink

Dalej kodu nie przeglądałem, gdybyś miał jakiś jeszcze problem pisz cheeky

Podobne pytania

0 głosów
0 odpowiedzi 170 wizyt
0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 19 marca 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
1 odpowiedź 1,525 wizyt
pytanie zadane 21 stycznia 2018 w PHP przez Vastuney Nowicjusz (160 p.)

93,430 zapytań

142,424 odpowiedzi

322,652 komentarzy

62,789 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...