Avatar billede Droa Seniormester
19. august 2014 - 11:25 Der er 11 kommentarer og
1 løsning

SQL if giver null ligemeget hvad

Jeg sidder og prøver at lave en SqlCommand Execute Scalar, men ligemeget hvad jeg gjorde, så gav den altid Null, som om den fuldstændigt ignorede min kode, den gav heller ingen exception, så har ingen ide hvad fejlen skulle være?

jeg ville se om nogen kunne hjælpe mig? :)

Jeg bruger samme database, så er ret sikker på at databasen findes.


using (SqlConnection con = new SqlConnection(cs))
                {
                    con.Open();
//denne del virker absolut ikke, og selve objektet er null?
                    using (SqlCommand cmd = new SqlCommand(@"use MAXIphoneLogV2 if db_id('MAXIphoneLogV2') is not null print 'exists' else print 'not exists'", con))
                    {
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            Console.WriteLine("WTF?!");
                            while (reader.Read())
                            {
                                Console.WriteLine(reader[0]);
                            }
                        }
                    }
//Denne del virker helt fint, og give første col i Test
                    using (SqlCommand cmd = new SqlCommand(@"use MAXIphoneLogV2 select * from Test", con))
                    {
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine(reader[0]);
                            }
                        }
                    }

                    con.Close();
                }
Avatar billede JacobIpsen Nybegynder
19. august 2014 - 12:01 #1
du kan prøve følgende istedet
new SqlCommand("select * from MAXIphoneLogV2.Test", con)
istedet for
new SqlCommand(@"use MAXIphoneLogV2 select * from Test", con)

antager at du i din connection string har defineret hvilken base du vil ha fat i ?
Avatar billede Droa Seniormester
19. august 2014 - 12:04 #2
nu var der intet galt med den streng, der var den oven over :)

use MAXIphoneLogV2 if db_id('MAXIphoneLogV2') is not null print 'exists' else print 'not exists

har prøvet en del ting, men ligner at den der "if" sætning ikke rigtigt læses af SqlCommand, og bare sendes som en tom sætning, selvom den virker fint, når den bliver injectet i min SQL Manager 2012
Avatar billede Droa Seniormester
19. august 2014 - 12:06 #3
hvis jeg feks køre den som en select (uden en if), så virker det fint f.eks.

use MAXIphoneLogV2 select db_id('MAXIphoneLogV2')

men nu var det fordi jeg ville have en boolsk værdi tilbage, men ser bare ud til det er umuligt
Avatar billede Droa Seniormester
19. august 2014 - 12:18 #4
tror jeg fandt fejlen selv, ser ud til at "print" ikke læses af SqlCommand.. hmmm det er da lidt træls
Avatar billede Syska Mester
19. august 2014 - 12:46 #5
use MAXIphoneLogV2 if db_id('MAXIphoneLogV2') is not null print 'exists' else print 'not exists'

Det er noget rod ... først selecter du den db du tjekker for om er der ... jeg tror godt du kan springe den "use" over.

Men måske du kan gøre sådan her:
if db_id('MAXIphoneLogV2') is not null select 'exists' else select 'not exists'
Avatar billede Droa Seniormester
19. august 2014 - 12:48 #6
ja det fandt jeg os ud af, at jeg nok skulle fjerne den, det var mest fordi jeg prøvede at provokere serveren til at give en eller anden fejl, for at se om den overhovedet kontaktede serveren :)

men mange tak for svaret, det var sådan noget i den stil jeg ledte efter, planter du et svar? så sender jeg nogen point din vej
Avatar billede Syska Mester
19. august 2014 - 13:06 #7
Svar.

Men jeg ville nok returnere 1 eller 0 ( True / False ) og ikke en string value.

Så kan du i din kode læse det som True/False og ikke en "string" værdi hvor du så igen skal sammenligne med en anden string værdi for at finde ud af hvad den string værdi betyder :-) ( Håber det gav mening )

Eks:
if db_id('MAXIphoneLogV2') is not null select 1 as bit else select 0 as bit
Avatar billede Droa Seniormester
19. august 2014 - 13:17 #8
det har jeg os gjort nu, var dog nød til og bruge cast() for at få det rigtige resultat :)

if db_id('MAXIphoneLogV1') is not null select CAST(1 AS bit) else select CAST(0 AS BIT)
Avatar billede Syska Mester
19. august 2014 - 13:42 #9
Gav den fejl hvis du ikke havde "CAST" med? Hvad version af SQL?
Avatar billede Droa Seniormester
19. august 2014 - 13:59 #10
den gav ikke fejl, den navngav bare istedet for at ændre typen, så kolonnen kom til og hede "bit", istedet for at være en bit.
Jeg bruger 2012 :)
Avatar billede Syska Mester
19. august 2014 - 16:08 #11
Dohhh, hahha, ja, selvfølgelig. Mig der sover ... *heheh*
Avatar billede Droa Seniormester
19. august 2014 - 17:00 #12
det er bare i orden, jeg viste hvad du mente :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester