• 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

Object Storage Arubacloud
0 głosów
650 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 126 wizyt
0 głosów
1 odpowiedź 293 wizyt
pytanie zadane 19 marca 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 1,200 wizyt
pytanie zadane 21 stycznia 2018 w PHP przez Vastuney Nowicjusz (160 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...