Błąd w składni zapytania sql datareader

Błąd w składni zapytania sql datareader
EN
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 2 lata
0

Cześć wszystkim!
Mam problem z zdefiniowaniem błędu. Program nie chce się uruchomić. Byłbym wdzięczny za pomoc.
Pragnę wyciągnąć z bd 2 wartości (Imie_wnioskodawcy i Nazwisko_wnioskodawcy) na podstawie zapytania, którego zawężeniem jest zawartość textboxa TBPESELDoWyswietlenia aby później wczytać te 2 wartości do textboxow (TBImie i TBNazwisko). Podczas kliknięcia buttonu uruchamiającego procedurę wyświetla się komunikat „Nie istnieją dane dla wiersza/kolumny." wskazując na linijkę:

TBImie.Text = myreader["Imie_wnioskodawcy"].ToString();

Komunikat sugeruje mi, że tabela nie zawiera podanych informacji... a jednak zawiera.

Kopiuj
string strConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Projekty\Baza_danych_projektow.accdb";

            string strQuery = "select Imie_wnioskodawcy, Nazwisko_wnioskodawcy from tabela_wnioskodawcy where" + " PESEL = @PESEL";

            OleDbConnection con = new OleDbConnection(strConnString);
            OleDbCommand cmd = new OleDbCommand();

            cmd.Parameters.AddWithValue("@PESEL", TBPESELDoWyswietlenia.Text);
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = strQuery;
            cmd.Connection = con;
            OleDbDataReader myreader;


                try
                {
                    con.Open();
                    myreader = cmd.ExecuteReader();
                    myreader.Read();

                    TBImie.Text = myreader["Imie_wnioskodawcy"].ToString();
                    TBNazwisko.Text = myreader["Nazwisko_wnioskodawcy"].ToString();

                    myreader.Close();
                }
                finally
                {
                    con.Close();
                }

W czym jest problem?

edytowany 2x, ostatnio: cerrato
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2

W czym jest problem?

Problem jest 50 cm przed monitorem.
Nadal heliologia motykowa?

Na marginesie, skąd skopiowałeś takie dziwne sklejanie kwerendy?

Komunikat jest jasny - nie ma takich danych. Kwerenda znajduje zero wierszy.
Nie jest to komunikat o błędach składniowych.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 1x, ostatnio: ZrobieDobrze
EN
Z całym szacunkiem, ale jeśli ktoś hipotetyczny chciałby pomóc to nie zadawałby pytań retorycznych nie rozwiązujących problemu. Kwerenda nie jest problemem. Jest pozostałością po innym kodzie, błędną chyba jednak nie jest.
ZD
Sam napisałeś, że błąd jest w składni kwerendy ... zdecyduj się.
EN
Szeryf... czepiasz się rozumiejąc naturę problemu nadal nie udzielając pomocnej odpowiedzi. Tabela zawiera potrzebne dane.
cerrato
heliologia motykowa :D :D :D
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

Tak jak napisał @ZrobieDobrze, nie masz żadnych wierszy, które spełniają warunek. Kod jest w opłakanym stanie i widać, że to kopiuj/wklej z różnych źródeł i uważam, że w tej kwestii też @ZrobieDobrze ma racje.

Jaki to ma sens?

Kopiuj
string strQuery = "select Imie_wnioskodawcy, Nazwisko_wnioskodawcy from tabela_wnioskodawcy where" + " PESEL = @PESEL";

Zmień na

Kopiuj
string strQuery = "select Imie_wnioskodawcy, Nazwisko_wnioskodawcy from tabela_wnioskodawcy where PESEL = @PESEL";

Możesz sprawdzić czy masz jakieś wyniki

Kopiuj
if(myreader.Read())
{
  TBImie.Text = myreader["Imie_wnioskodawcy"].ToString();
  TBNazwisko.Text = myreader["Nazwisko_wnioskodawcy"].ToString();
}

Dodatkowo upewniłbym się czy TBPESELDoWyswietlenia.Text ma w ogóle jakąś wartość.

Zobacz pozostałe 2 komentarze
EN
TBPESELDoWyswietlenia.Text zawiera wartość liczbową pobraną z gridview po kliknięciu na jeden z jego rekordów. To co znajdzie się w TBPESELDoWyswietlenia.Text ma stać się częścią zapytania. PESEL w bazie danych jest typu liczbowego więc nie może zawierać dodatkowych znaków (chyba). Błędy na które wskazujesz nie są błędami, są przyjętą metodologią. Nie tak?
AdamWox
Dobra, twój bałagan, twój problem, nie dasz sobie powiedzieć to nie... Dołóż do listy złych rzeczy - PESEL jako liczba. Wracając do twojego zapytania i danych - zdajesz sobie sprawę z tego, że komputer wie lepiej, że nie masz danych i na jakieś postawie ci to sygnalizuje? To nie jest kaprys bazy danych, że ci teraz nie wyświetla tego co chcesz, a faktyczny wynik tego o co próbujesz bazę zapytać. Z tego co wiem to OleDb nie wspiera nazywanych parametrów. Używa się do tego ?
EN
Co jest niewłaściwego w PESEL jako liczbie? Przecież jakby nie było - tą liczbą jest.
maszrum
Zapisz pesel kogoś kto urodził się w 2000 roku jako integer ;)
EN
Heh. Ok. Rozumiem.
EN
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 2 lata
0

...to dlaczego "tu" mi działa? :D

Kopiuj
String strConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Projekty\projekty.accdb";
                string strQuery = "select * from projects where Identyfikator = @Identyfikator";
                OleDbConnection con = new OleDbConnection(strConnString);
                OleDbCommand cmd = new OleDbCommand();
                cmd.Parameters.AddWithValue("@Identyfikator", DropDownList4.SelectedItem.Value);
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strQuery;
                cmd.Connection = con;
                OleDbDataReader myreader;
                try
                {
                    con.Open();
                    myreader = cmd.ExecuteReader();
                    myreader.Read();

                    TextBox12.Text = myreader["Nazwa_projektu"].ToString();
                    TextBox2.Text = myreader["Wlasciciel"].ToString();
                    TextBox4.Text = myreader["Cel_projektu"].ToString();
                    TextBox3.Text = myreader["Data_rozpoczecia"].ToString();
                    TextBox6.Text = myreader["Data_zakonczenia"].ToString();
                    DropDownList1.Text = myreader["Project_manager"].ToString();
                    DropDownList2.Text = myreader["Team_manager"].ToString();
                    DropDownList3.Text = myreader["Executive"].ToString();

                    myreader.Close();
                }
                finally
                {
                    con.Close();
                }
EN
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 2 lata
0

A czy nie ma tu znaczenie to, że textbox nie ma parametru wartość (value), a jedynie zawartość/tekst (text)? I może - nie można użyć:

cmd.Parameters.AddWithValue("@PESEL", TBPESELDoWyswietlenia.Text);

tak jak w przypadku:

cmd.Parameters.AddWithValue("@Identyfikator", DropDownList4.SelectedItem.Value);

edytowany 2x, ostatnio: eninede
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

Moim zdaniem typ danych też ma znaczenie podczas podawania parametru. Nie jestem pewny, bo nie używam readerów, ale czy przypadkiem metoda AddWithValue nie sprawdza typu podanej wartości? Jeśli u ciebie PESEL jest liczbą, a ty mu wrzucasz TBPESELDoWyswietlenia.Text gdzie typeof == string 🤔

Prawdopodobnie DropDownList4.SelectedItem.Value jest typu int więc działa ci do Idenyfikatora

edytowany 2x, ostatnio: AdamWox
AD
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:27
1

Entity Framework, pisanie zapytań do bazy w stringach to nieporozumienie (i nie chodzi tutaj o cześć garderoby).

EN
O Jezusiu kochaniutki... i weź "taką" odpowiedź uznaj za pomoc.:P
EN
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 2 lata
0

Problem rozwiązałem dzięki:

        cmd.Parameters.Add("@PESEL", OleDbType.VarChar).Value = TBPESELDoWyswietlenia.Text;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.