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:około 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:31 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2156
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:31 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2156
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;
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)