Avatar billede cdm_kiwie Nybegynder
15. maj 2003 - 11:31 Der er 20 kommentarer og
3 løsninger

ASP.NET if sætning virker ikke helt

jeg har følgende sub:

  sub page_load
    if not isPostBack then
      Dim con As SqlConnection
      Dim cmdSelect AS SqlCommand
      Dim strSQL As String
     
      con = new SqlConnection("Server=localhost; UID=cdm; pwd=; Database=cms")
      con.Open()
      strSQL = "SELECT HTMLoutput FROM HtmlText WHERE ModuleID = "& request("ModuleID") &""
      cmdSelect = New SqlCommand(strSQL , con)   
     
      response.write(strSQL)
      if not cmdSelect.ExecuteScalar() is System.DbNull.Value
        txtOutput.Text = cmdSelect.ExecuteScalar()
      else
        strSQL = "INSERT INTO HtmlText (ModuleID) Values(" & request("ModuleID") & ")"
    cmdSelect = New SqlCommand(strSQL ,con)
    response.write(strSQL)
    cmdSelect.ExecuteNonQuery()
    txtOutput.Text = ""   
    end if

      con.close()
    end if
  end sub

Den skal først teste om en bestemt værdi er i min db hvis ikke skal den oprettes ellers udskrives. Jeg ved at der ikke er noget i min db, men den opretter heller ikke en ny.
Avatar billede cdm_kiwie Nybegynder
15. maj 2003 - 11:32 #1
Det er nok her det går skævt:

if not cmdSelect.ExecuteScalar() is System.DbNull.Value
Avatar billede medions Nybegynder
15. maj 2003 - 12:12 #2
Du mangler Then !

//>Rune
Avatar billede medions Nybegynder
15. maj 2003 - 12:13 #3
Altså:

if not cmdSelect.ExecuteScalar() is System.DbNull.Value Then

//>Rune
Avatar billede cdm_kiwie Nybegynder
15. maj 2003 - 12:53 #4
ja oki men det hjalp ikke på problemet.
Avatar billede medions Nybegynder
15. maj 2003 - 12:56 #5
kommer den ikke med en fejlmeddelse?

//>Rune
Avatar billede cdm_kiwie Nybegynder
15. maj 2003 - 13:22 #6
nej den springer konstant ned i else sætningen
Avatar billede z42cool Nybegynder
15. maj 2003 - 15:40 #7
ExecuteScalar returnerer Null og ikke System.DbNull.Value hvis der ikke er noget at returnere, derfor:

if cmdSelect.ExecuteScalar()<>Null Then
Avatar billede odegaard Nybegynder
15. maj 2003 - 17:47 #8
z42cool: Kan man det eller er det hurtigt skrevet om fra C# ? Som jeg har lært det, skal man skrive
If Not cmdSelect.ExecuteScalar() Is Nothing Then
da man i VB ikke kan sammenligne noget med "ingenting".
Avatar billede somaliomar Praktikant
16. maj 2003 - 11:50 #9
Erstat

  if not cmdSelect.ExecuteScalar() is System.DbNull.Value

med

  If cmdSelect.ExecuteScalar() > 0 Then
Avatar billede odegaard Nybegynder
16. maj 2003 - 12:01 #10
somaliomar: sammenligningen "cmdSelect.ExecuteScalar() > 0" kræver at cmdSelect.ExecuteScalar() bliver konverteret til en integer. Dette går galt hvis cmdSelect.ExecuteScalar() er nothing eller DBNull.Value.
Avatar billede odegaard Nybegynder
16. maj 2003 - 12:06 #11
Prøv lige det her istedet:
cmdSelect.ExecuteScalar()
Dim i As Integer = cInt(cmdSelect.Parameters(0).Value())
Avatar billede somaliomar Praktikant
16. maj 2003 - 12:07 #12
Jeg kan ikke se hvordan cmdSelect.ExecuteScalar() kan returnere
Nothing eller DBNull.Value. Så vidt jeg kan se returnere ExecuteScalar() enten 0 eller 1.
Avatar billede odegaard Nybegynder
16. maj 2003 - 20:02 #13
Somaliomar: Fra SDK'en:
Public Overridable Function ExecuteScalar() As Object
Return Value:
The first column of the first row in the result set, or a null reference if the result set is empty.

Hvor har du det med 0 og 1 fra ??!?
Avatar billede odegaard Nybegynder
16. maj 2003 - 20:08 #14
Jeg holder stadig på at ifølge SDK'en og de eksempler jeg har set, så burde dette være den rigtige metode:
If Not cmdSelect.ExecuteScalar() Is Nothing Then
Hvis det ikke virker, vil jeg mene at fejler ligger et andet sted.
Avatar billede somaliomar Praktikant
16. maj 2003 - 22:35 #15
odegaard >> Du kender sikkert 101010100100101. Det er der jeg har 0 og 1 fra... hehehe... Nej, jeg mente, at funktionen ExecuteScalar enten returnerer den første række af forespørgslen eller værdien 0 og ikke Nothing. Jeg har selv nogle applikationer som virker, hvor jeg tester ExecuteScalar() sådan her:

[VB.NET]
cmd.ExecuteScalar() = 0 eller cmd.ExecuteScalar() <> 0

[C#]
cmd.ExecuteScalar().ToString() == "0" eller cmd.ExecuteScalar().ToString() != "0"
Avatar billede odegaard Nybegynder
16. maj 2003 - 23:04 #16
tja... så må SDK'en jo tage fejl hvis det forholder sig som du siger.
Avatar billede somaliomar Praktikant
16. maj 2003 - 23:06 #17
Måske tager SDK'en fejl eller måske betyder "null reference" bare "0".
Avatar billede odegaard Nybegynder
17. maj 2003 - 00:59 #18
Det sidste er ihvertfald ikke tilfældet. "Null" har intet at gøre med det danske ord "nul". Nul er en værdi, det er Null ikke.
Avatar billede somaliomar Praktikant
17. maj 2003 - 09:55 #19
OK. Så siger vi det :D
Avatar billede cdm_kiwie Nybegynder
19. maj 2003 - 09:39 #20
cmdSelect.ExecuteScalar() > "" gav det ønskede resultat. Det var der desværre ingen af jer der havde, men i før sku bare point.
Avatar billede odegaard Nybegynder
19. maj 2003 - 10:01 #21
somaliomar: Hvis du laver en forespørgsel der skal returnere et nul, hvordan skelner du så mellem om den fandt dit nul eller at den slet ikke fandt noget?
Avatar billede somaliomar Praktikant
19. maj 2003 - 14:37 #22
odegaard > Du har et pointe der ! Det kan jeg godt nok ikke lige svare dig på.
Avatar billede somaliomar Praktikant
19. maj 2003 - 14:37 #23
Tak for points :D
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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