SQL 2005 stored proc parameter datetime
Hej,Jeg oplever noget meget mystisk. Jeg har en .net webapplikation hvorfra jeg ønsker at kalde en stored proc og gemme nogle værdier. Det er meget banalt, så jeg må overse et eller andet.
Det går galt med en datetime parameter, som fx kunne se sådan her ud :
cmd.Parameters["@start"].Value = DateTime.Now;
Jeg får så at vide at der går noget galt og når jeg kører sql profiler, kan jeg se at kaldet i sin helhed ser ud som følger når det rammer sql-serveren :
exec SaveProjectTask @id=NULL,@code=N'02',@title=N'asdf',@description=N'asdf',@longtext=N'asdf',@start=''2007-01-24 21:15:09:923'',@end=''2007-01-24 21:15:09:923'',@peid=1,@pid=3,@sid=1,@documented=0
Når man ser på stedet med @start og @end ses det at der indsættes to apostroffer, datoen og så igen to appostroffer.
Hvis jeg indsætter det og kører det manuelt ser jeg klart at det går galt. Det skal kun være en apostrof før og en efter. Eller det skal gøres via CONVERT eller noget andet. Men. Jeg bruger jo bare .net's SqlCommand-klasse og stikker den en .Net DateTime.
Parameteren er tilføjet som SqlType.DateTime, så jeg mener at det er som det bør være.
Jeg har gjort dette en milliard gange op mod sql2000, så det må være eeeet eller andet ift sql2005. Det er det første jeg laver på den.
Problemet kan også ligge i min stored proc. Den indsættes her:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SaveProjectTask]
(
@id int, @code nvarchar(50), @title nvarchar(200), @description nvarchar(500), @longtext nvarchar(4000),
@start datetime, @end datetime, @peid int, @pid int, @sid int, @documented bit
)
AS
BEGIN
SET NOCOUNT ON;
if (@id = NULL)
begin
insert into dbo.tblProjectTask (ptCode, ptTitle, ptDescription, ptLongText, ptStart, ptEnd, pt_peID, pt_pID, pt_sID, ptDocumented)
values (@code, @title, @description, @longtext, @start, @end, @peid, @pid, @sid, @documented)
return @@identity
end
else
begin
update dbo.tblProjectTask set
ptCode=@code, ptTitle=@title, ptDescription=@description, ptLongText=@longtext,
ptStart=@start, ptEnd=@end, pt_peID=@peid, pt_pID=@pid, pt_sID=@sid, ptDocumented=@documented
where ptID=@id
end
END
Håber der er andre der har været i min situation. Har googlet på det uden held, så lad eksperterne tale!
Mvh. Morten