Problem z dodawaniem zdjęcia.

0

Witam

Mam pisze program w Visual C# 2008 express jako bazy używam SQLite, i mam pewien problem otóż mam TextBox-y w których wpisuje dane i po wcisnięciu buttona dodaj zapisuje mi te dane do mojej bazy, chcĘ także aby zapisywało mi wybrane zdjęcie w wybrane miejsce i jest problem w momencie wybrania zdjęcia które, chcĘ zapisać używam do tego OpenFileDialog.FileName aby wypisało mi scieżkę źródła w TextBox. Wyświetla mi źródło w TextBox ale w momencie wciśnięcia przycisku dodaj wyrzuca mi błąd że nie może odnaleźć danej tabeli w bazie, natomiast gdy nie wybiorę zdjęcia to wszystko jest dobrze. Czy może ktoś wie gdzie jest błąd ? Kod poniżej:

private void Dodaj_Click(object sender, EventArgs e)
        {
            var connection = new SQLiteConnection("Data Source=Baza.db3;");

            try
            {
                connection.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "Błąd połączenia z bazą");
            }

            try
            {
                using (var command = connection.CreateCommand())
                {
                    var NazwaKategori = Kategoria.Text;
                    NazwaKategori = NazwaKategori.Replace('-', '0');
                    NazwaKategori = NazwaKategori.Replace(' ', '0');
                    NazwaKategori = NazwaKategori.Replace(':', '0');
                    NazwaKategori = NazwaKategori.Replace('/', '0');
                    NazwaKategori = NazwaKategori.Replace('(', '0');
                    NazwaKategori = NazwaKategori.Replace(')', '0');
                    NazwaKategori = NazwaKategori.Replace('[', '0');
                    NazwaKategori = NazwaKategori.Replace(']', '0');
                    NazwaKategori = NazwaKategori.Replace('{', '0');
                    NazwaKategori = NazwaKategori.Replace('}', '0');
                    NazwaKategori = NazwaKategori.Replace('<', '0');
                    NazwaKategori = NazwaKategori.Replace('>', '0');
                    
                    command.CommandText = "INSERT INTO " + NazwaKategori + "(Kod, Kategoria, Nazwa, Opis, Uwagi, Osoba, Data) VALUES('" + DodajKod.Text + "', '" + Kategoria.Text + "', '" + DodajNazwaEnglishPolish.Text + "', '" + DodajOpis.Text + "', '" + UwagiRozwiazania.Text + "', '" + OsobaWprowadzajaca.Text + "', '" + DataWprowadzenia.Text + "')";
                    command.ExecuteNonQuery();
                    
                    string sciezka = SciezkaZdjecieInspekcja.Text;
                    File.Copy(sciezka, "C:\\Documents and Settings\\Quatro\\Moje dokumenty\\Visual Studio 2008\\Projects\\Maintenance - Quality\\Maintenance - Quality\\bin\\Debug\\" + Kategoria.Text +"\\nazwa9.jpg");
                    StatusDodaj.Text = "OK";
                    StatusDodaj.ForeColor = Color.Green;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " Błąd podczas dodawania");
                StatusDodaj.Text = "NG";
                StatusDodaj.ForeColor = Color.Red;
            }
            connection.Close();

            
        }

        private void BrowseZdjecieInspekcja_Click(object sender, EventArgs e)
        {

            openFileDialog1.ShowDialog();
            SciezkaZdjecieInspekcja.Text = openFileDialog1.FileName;
            
        }
0

Może inaczej zapytam w Buttonie mam kod łączący się z bazą gdzie zapisują się pewne dane wpisane w TextBox używam także OpenFileDialog aby wybrać plik do kopiowania np: zdjęcie i tu jest problem w momencie jak wybiore plik i jego ścieżka wyświetli się w TextBox i wciskam Button który zapisuje dane do bazy oraz kopiuje zdjęcia wyrzuca błąd że danej tabeli nie ma w bazie natomiast gdy nie wybiorę zdjęcia czyli nie użyje OpenFileDialog to wszystko jest OK. Czy OpenFileDialog może wpływać na połączenie z bazą ?

0

nie, nie moze.

biorac zas pod uwage w jaki sposob konstruujesz zapytanie do bazy danych, moze masz tam jeszcze jakies wysylanie do jakiejs tabeli ścieżki do tego zdjęcia? jesli tak, to moze ta ścieżka przelatuje do bazy wraz z zawartą w niej jakims cudem cudzyslowem, apostrofem itp. a moze po prostu ze spacja lub czyms innym co sprawia, ze SQLite zaczyna traktowac fragment ŚCIEŻKI jako nazwe jakiejś tablicy -- i zglasza ze tabeli danej nie ma.

postaw breakpointa w linii ktora opowiada za wyslanie zapytania do bazy i po prostu podejrzyj TEKST INSERTA ktory sie zaraz wywali z bledem ze nie ma tabeli. tekst walnietego SQL zapytania od razu Ci pokaze co poszlo nie tak..

a tak na boku:
A) albo wez sie za sprawe porzadnie i zamiast zlepiac zapytanie recznie, uzyj jakiegos mechanizmu PARAMETROW zapytania - w Twoim dbkliencie powinno to byc. jesli nie chcesz, albo jeszcze Ciebie nikt nie nauczyl ze wredny uzytkownik moze wpisac OsobaWprowadzajaca = "blahblah'; drop table MojaKategoriaLeciWHiperprzestrzen;" to zastanow sie co sie stanie gdy ktos Ci takie cos wpisze przy tym kodzie co u gory zamiesciles

B) albo, jesli SQLite nie udostepnia opcji parametrow zapytania, w co szczerze watpie, to na pewno udostepnia jakas funkcje do ESCAPE'owania niebezpiecznych znakow w zapytaniu - i powinienes wszystkie stringi wklejane w tekst zapytania escape'owac niąże

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