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

Błąd podczas dodawania rekordu do bazy

Object Storage Arubacloud
0 głosów
337 wizyt
pytanie zadane 5 lipca 2018 w C# przez Cacu003 Początkujący (260 p.)

Mam problem, mianowicie stworzyłem prostą aplikację do dodawania osób i przy próbie dodania wyskakuje mi błąd.

System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

Czy ktoś może mi powiedzieć co robię źle?

Poniżej zamieszczam kod:

using System;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        public static SQLiteConnection polaczenie = new SQLiteConnection(string.Format("Data source={0}", Path.Combine(Application.StartupPath, "kurs685.db")));
        private static SQLiteCommand komenda;
        public static string zapytanieSQL = ("");

        public static SQLiteCommand Komenda { get => komenda; set => komenda = value; }

        private void polacz_Click(object sender, EventArgs e)
        {
            polaczenie.Open();
            if (polaczenie.State == ConnectionState.Open)

                MessageBox.Show("Połączono z bazą danych.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);

            else
                MessageBox.Show("Połączenie z bazą danych nie udane.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
            polaczenie.Close();
        }

        private void tabela_Click(object sender, EventArgs e)
        {
            polaczenie.Open();
            if (polaczenie.State == ConnectionState.Open)
            {
                zapytanieSQL = string.Format("create table if not exists cudzoziemcy(Id intreger primary key , Imie varchar(30), DataUrodzenia varchar(20))");
                Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
                Komenda.ExecuteNonQuery();
                MessageBox.Show("Utworzono tabelę.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            polaczenie.Close();
        }

        private void dodaj_Click(object sender, EventArgs e)
        {
            DodajOsobe("", "");
           
        }
        public static void DodajOsobe(string imie, string urodzenia)
        {


            Komenda.CommandText = zapytanieSQL;
            zapytanieSQL = string.Format("insert into cudzoziemcy(Imie, DataUrodzenia)" +
                    "values('" + imie + "','" + urodzenia);
            SQLiteDataAdapter adapter = new SQLiteDataAdapter(Komenda);
            Komenda.ExecuteNonQuery();

        }
        public class Obcy
        {
            public string Imie { get; set; }
            public string DataUrodzenia { get; set; }

            public Obcy() { }

            public Obcy(string imie, string urodzenia)
            {
                this.Imie = imie;
                this.DataUrodzenia = urodzenia;
            }
        }
    }
}

 

komentarz 5 lipca 2018 przez mbady Obywatel (1,280 p.)
Dodaj informację, w którym momencie dostajesz ten błąd, czy to przez opis, co wywołujesz i jak lub zaznaczając w kodzie (jest taka opcja w wyświetlaczu kodu) która linia rzuca taki wyjątek.
komentarz 5 lipca 2018 przez Cacu003 Początkujący (260 p.)
Komenda.CommandText = zapytanieSQL; Dokładnie w tej linii pokazuje mi się ten błąd.
komentarz 5 lipca 2018 przez bartas Nowicjusz (140 p.)
Zauważ że w metodzie DodajOsobe nie utworzyłeś nowego obiektu. Dlatego wyrzuca, że Komenda jest nullem.

1 odpowiedź

+1 głos
odpowiedź 5 lipca 2018 przez mbady Obywatel (1,280 p.)
wybrane 7 lipca 2018 przez Cacu003
 
Najlepsza
Najlepiej jakbyś uruchomił program w trybie debug i ustawił sobie pułapkę w tym miejscu, bo prawdopodobnie właściwość Komenda nie jest zainicjowana w momencie jak wywołujesz ten kod.

Z tego co widzę to "Komenda" jest tworzona w metodzie tabela_Click. Sprawdź w jakiej kolejności uruchamiasz swoje metody, bo może tabela_Click nie jest wywoływana.
komentarz 7 lipca 2018 przez Cacu003 Początkujący (260 p.)

Udało mi się z tym zaradzić, mianowicie zrobiłem podobnie jak jest w tabela_Click

private void dodaj_Click(object sender, EventArgs e)
        {
            polaczenie.Open();
            if (polaczenie.State == ConnectionState.Open)
            {
                zapytanieSQL = string.Format("insert into cudzoziemcy(Imie, DataUrodzenia)" +
                    "values ('" + imie1 + "','" + urodzeniad);
                Komenda = new SQLiteCommand(zapytanieSQL, polaczenie);
                Komenda.ExecuteNonQuery();
                MessageBox.Show("Dodano nowy rekord.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            polaczenie.Close();
        }

Tylko teraz podczas próby dodania pojawia mi się taki błąd:

System.Data.SQLite.SQLiteException: „SQL logic error
unrecognized token: "'System.Windows.Forms.DateTimePicker, Value: 2018-07-07 15:04:08"”

Wcześniej miałem problem żeby prze konwertować z string na DateTime i teraz zrobiłem tylko pod string. 

Podobne pytania

0 głosów
0 odpowiedzi 151 wizyt
pytanie zadane 21 stycznia 2018 w PHP przez Dexterim Dyskutant (8,370 p.)
0 głosów
1 odpowiedź 661 wizyt
pytanie zadane 12 sierpnia 2018 w C# przez Cacu003 Początkujący (260 p.)
0 głosów
1 odpowiedź 987 wizyt

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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!

...