Vreemd probleem return type stored procedure

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik heb een vreemd probleem, ik heb de volgende stored procedure:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE PROCEDURE [dbo].[GetGeoLocation]
    -- Add the parameters for the stored procedure here
    @street varchar(255),
    @number int,
    @lat float=0 output,
    @lon float=0 output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @lat = lat,@lon = lon
  FROM [postcodes].[dbo].[REF_Postcode_NL]
  where street like @street
  and 
  
  @number <= maxnumber and @number >= minnumber

and

((2 % 2 = 1 and numbertype = 'odd') or (2 % 2 = 0 and numbertype = 'even') or numbertype = 'mixed')
and 
city_id in (1024,1025,3569)


END

Wanneer ik deze in de SQL console uitvoer gaat het gewoon goed, en krijg ik een resultaat als:

@lat @lon
52,3771191146461 4,7997303146746

Echter in code krijg ik alleen het cijfer voor de komma....

Dit is mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void RunStoredProcParams()
        {

            string sConn = "Server=(local);DataBase=Postcodes;Integrated Security=SSPI";
            using (SqlConnection conn = new SqlConnection(sConn))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand("GetGeoLocation", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.AddWithValue("@street", "Goeman Borgesiusstraat");  // input parameter
                    cmd.Parameters.AddWithValue("@number", 2);  // input parameter


                    // output parameter
                    SqlParameter lat = new SqlParameter("@lat", DbType.Double);
                    lat.Direction = System.Data.ParameterDirection.Output;
                    cmd.Parameters.Add(lat);

                    // output parameter
                    SqlParameter lon = new SqlParameter("@lon", DbType.Double);
                    lon.Direction = System.Data.ParameterDirection.Output;
                    cmd.Parameters.Add(lon);

                    cmd.ExecuteNonQuery();
                    Console.WriteLine(lon.Value);


                }
            }
        }

Volgens de MS documentatie dien je DbType.Double te gebruiken, dus dit lijkt me correct.
Het vreemde is dat het resultaat niet een Float is, maar Int32, en als ik die afdruk is het resultaat: 4
Dus niet het deel achter de komma, iemand een idee wat ik fout doe?

Beste antwoord (via raptorix op 04-08-2017 12:43)


  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 11-09 22:33
Waarom gebruik je geen Spatial Data types in je database? Dan kun je gewoon native met bijvoorbeeld punten werken en heb je dit probleem niet.

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 11-09 22:33
Waarom gebruik je geen Spatial Data types in je database? Dan kun je gewoon native met bijvoorbeeld punten werken en heb je dit probleem niet.

Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
alex3305 schreef op vrijdag 4 augustus 2017 @ 12:40:
Waarom gebruik je geen Spatial Data types in je database? Dan kun je gewoon native met bijvoorbeeld punten werken en heb je dit probleem niet.
Oh, het is gewoon even een eenmalig hobby dingetje, ik had de database gewoon ergens gedownload.
Wist trouwens niet dat MS tegenwoordig standaard spatial types ondersteunt.

Maar dan nog vraag ik me af waar het fout gaat.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:34
Wellicht moet je bij uw output-parameter ook de precision opgeven, wat je nu niet doet.

Daarnaast vraag ik me af waarom je een stored procedure maakt in dit geval, en geen user defined function ?
(Een SP returned geen waarde, een UDF wel).

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik heb het maar opgelost door niet met returnparameters te werken, en een SqlDataReader te gebruiken.
Overigens mbt waarom geen functie? Volgens mij zijn functies daar niet voor bedoeld en meen ook dat deze slechter performen.

Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

raptorix schreef op vrijdag 4 augustus 2017 @ 12:44:
[...]
Maar dan nog vraag ik me af waar het fout gaat.
Wat gebeurt er dan als je het result cast als decimal?

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Harrie_ schreef op vrijdag 4 augustus 2017 @ 15:37:
[...]


Wat gebeurt er dan als je het result cast als decimal?
Dat maakte niet uit, anyway, ik heb het anders opgelost, dus is nu niet zo heel belangrijk meer.
Pagina: 1