NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: C# MS-SQL problém s klauzulí WHERE

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
petr.chatar.anton:18.9.2015 10:49

Zdravím všechny a prosím o pomoc.
V kódu definuju dotaz takto:

SqlCommand prikaz = new SqlCommand("SELECT * FROM Orsoft.dbo.CESTY1 WHERE cislo = '1500101394'", pripojeni);
SqlDataReader dataReader = prikaz.ExecuteReader();

Takto sestavený dotaz mi nic nevrátí, dataReader je EMPTY. Když takto sestavený příkaz spustím jako query v SQL Management Studio, vrátí mi správný výsledek. Když z dotazu v programu odstraním podmínku WHERE, dataReader se naplní.
Dokážete mi pomoct, kde dělám chybu?
Děkuju.

Editováno 18.9.2015 10:49
 
Odpovědět
18.9.2015 10:49
Avatar
petr.chatar.anton:18.9.2015 11:21

Nejsem si jist, jestli jsem to napsal úplně správně, výsledek dotazu v dataReaderu je:

 
Nahoru Odpovědět
18.9.2015 11:21
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:18.9.2015 11:28

Zkus to napsat takto

SqlCommand prikaz = new SqlCommand("SELECT * FROM CESTY1 WHERE cislo = '1500101394'", pripojeni);

Určitě je tam sloupec, který se jmenuje "cislo" a určitě obsahuje hodnotu "1500101394"?
Jak vypisuješ obsah toho datareaderu?

Nahoru Odpovědět
18.9.2015 11:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
petr.chatar.anton:18.9.2015 11:36

Když to napíšu podle Tvé rady, nenajde tabulku CESTY1.
Obsah vypisuju takhle:

while (dataReader.Read())
                   {
                       MessageBox.Show(dataReader.GetString(0));
                       hlavniFormular.CisloCPLabel.Text = dataReader.GetString(0);
                       hlavniFormular.Refresh();
                   }
               }
               dataReader.Close();

Ten messagebox tam je jen pro kontrolu, zatím.
Sloupec i hodnota v tabulce CESTY1 jsou. Ten příkaz v SQL funguje, jen tady mi nevrací žádný výsledky.

 
Nahoru Odpovědět
18.9.2015 11:36
Avatar
petr.chatar.anton:18.9.2015 11:42

Takhle to vypadá v SQL Studiu

 
Nahoru Odpovědět
18.9.2015 11:42
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:18.9.2015 12:08
  1. Jsi připojený ke správné databázi ?
  2. Co se stane když tu podmínku tam nedáš?.
  3. Je dobrým zvykem používat parametry. V budoucnu tě to odstíní od různých překvapení.
 
Nahoru Odpovědět
18.9.2015 12:08
Avatar
petr.chatar.anton:18.9.2015 12:33

Jak už jsem psal, když tu podmínku vyndám, dotaz funguje a dataReader se naplní. To, jak ten dotaz mám teď, je jen kvůli tomu, abych zjistil, proč mi to nefunguje. Originál vypadá takhle:

SqlCommand prikaz = new SqlCommand("SELECT cislo,convert(varchar, CESTY1.oscis) + oscis_vzt AS PPV,LTRIM(rtrim(daido.jm_jmeno)) + ' ' + ltrim(rtrim(daido.jm_prijm)) AS jmeno,utvar,poc_misto,poc_dat,jedn_misto,kon_misto,kon_dat,etapa FROM Orsoft.dbo.CESTY1 INNER JOIN Orsoft.dbo.daido ON daido.oscis = cesty1.oscis WHERE CESTY1.cislo = '" + cisloCP.Trim() + "'", pripojeni);
 
Nahoru Odpovědět
18.9.2015 12:33
Avatar
petr.chatar.anton:18.9.2015 15:00

No, už mi to funguje. Přepsal jsem to na DataAdapter a výsledek posílám do DataSetu a tak mi to funguje.
Dík.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
18.9.2015 15:00
Avatar
Odpovídá na petr.chatar.anton
sadlomaslox25:18.9.2015 15:02

neni "cislo" typu integer a ty v tom porovnani porovnavas typ integer se stringem '1500101394' ?

 
Nahoru Odpovědět
18.9.2015 15:02
Avatar
Odpovídá na sadlomaslox25
petr.chatar.anton:18.9.2015 15:04

Nene, není. Až takhle blbej nejsem :-)))))

 
Nahoru Odpovědět
18.9.2015 15:04
Avatar
petr.chatar.anton:18.9.2015 15:06

Ještě pro zajímavost, kdyby se s tím někdo taky mořil, mám to takhle:

public DataSet VyhledejCestak(string cisloCP, SqlConnection pripojeni)
{
    string cisloCestaku = "1500101394";
    string dotazSQL = ("SELECT cislo,convert(varchar, CESTY1.oscis) + oscis_vzt AS PPV,LTRIM(rtrim(daido.jm_jmeno)) + ' ' + ltrim(rtrim(daido.jm_prijm)) AS jmeno,utvar,poc_misto,poc_dat,jedn_misto,kon_misto,kon_dat,etapa FROM Orsoft.dbo.CESTY1 INNER JOIN Orsoft.dbo.daido ON daido.oscis = cesty1.oscis WHERE CESTY1.cislo = @cisloCestaku" );
    SqlCommand prikaz = new SqlCommand(dotazSQL, pripojeni);
    prikaz.Parameters.Add("@cisloCestaku", SqlDbType.VarChar).Value = cisloCestaku;
    DataSet vysledekDotazu = new DataSet();
    SqlDataAdapter dataAdapter;
     try
     {
         if (pripojeni.State.Equals(ConnectionState.Open))
         {
             dataAdapter = new SqlDataAdapter(prikaz);
             dataAdapter.Fill(vysledekDotazu);
         }
     }

    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
     return vysledekDotazu;
 
Nahoru Odpovědět
18.9.2015 15:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.