Ik heb een vreemd probleem, ik heb de volgende stored procedure:
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:
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?
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?