fredag den 11. april 2014

SQL Server og tal-id'er kan godt blive uvenner

Min (4) must be less than or equal to max (-1) in a Range object.

Har i dag stødt på en meget underlig fejl!
Ovenstående fejl fik jeg pludseligt efter at have lavet en rettelse i en tabel, og nu ville den pludseligt ikke tillade mig at lave select på en tabel med select("ObjectID = 20").

Sad længe og undersøgte at der var en tabel, der var rækker, der var kolonner, ObjectID-kolonnen fandtes også. Alt var faktisk lige som det skulle være, men alligevel fik jeg denne fejl.
Det mest underlige var at søgning på
id = 1
id = 4
id = 11
virkede fint, men da den kom til 20 så fik jeg overstående fejl.

Løsningen blev at jeg måtte lave den om så SQL'en blev select(" ObjectID = '20' "), altså med plinger udenom min talværdi som skal søge ned i en række med tal. Dette løste problemet, men efterlod mig stadig forundret over at det var nødvendigt. Jeg forsøger at forsikre mig selv om at det er SQL serveren der har fået noget galt i halsen så det var nødvendigt.


Hvis man arbejder i VB.NET, og man er vant til at arbejde i C# .NET skal man lige være opmærksom på en ting. Hvis du i VB.NET vil kontatinere en sql select string selv, så skal du bruge & til at sammenstykke dem, og huske at lave .ToString() på dine tal værdier, fordi VB.NET kan ikke ligesom C#.NET kan, finde ud af at hvis du sammensætter en string med et tal, skal tallet laves til en string.
Så hvis du bruger '+' imellem din string og tal, så vil den forsøge at lave det til et regnestykke og kan give meget underlig opførsel.

"ObjectID = '" + e.Item("ID") + "'" er forkert!
Det skal være "ObjectID = '" & e.Item("ID").ToString() & "'" er korrekt!

Så brug &-tegn i stedet for +-tegn når du arbejder med strenge og tal, i VB.NET, plus husk at lave dine tal til bogstaver med .ToString() så du er sikker på at VB.NET ikke laver et regnestykke i stedet.

Ingen kommentarer:

Send en kommentar

Kan du lide mit indlæg, har en kommentar, forslag eller andet på hjerte så skriv venligst