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

C# .NET .NET (C# a Visual Basic) C# MS-SQL problém s klauzulí WHERE American English version English version

Avatar
petr.chatar.anton:

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:

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:

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:

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:

Takhle to vypadá v SQL Studiu

 
Nahoru Odpovědět 18.9.2015 11:42
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:
  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:

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:

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:

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:

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

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

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.