在存储过程中将 nvarchar 数据类型转换为 datetime 数据类型

conversion of a nvarchar data type to a datetime data type in stored procedure

当我将开始日期和结束日期的日期日期(文本框的字符串值)传递给 sql 时出现错误。

alter procedure [dbo].[sp_insert_ProjectDetail]    
(@projectname varchar(max),    
@projectnos varchar(20),    
@Task_assigned varchar(max),  
@Startdate varchar(30),    
@enddate varchar(30),    
@status varchar(20),  
@analyst varchar(max),    
@qualitycheck varchar(max) 
)as    

declare @value as varchar(20)    

INSERT INTO tbl_ProjectDetails(ProjectName,ProjectNos,Task_assigned,Startdate,enddate,Analyst,Qualitycheck,flag,Status_Name)VALUES (@projectname,@projectnos,@Task_assigned,@Startdate,@enddate,@analyst,@qualitycheck,0,@status)    

I am getting error

顶提示;始终 post 确切的错误消息 ,并且理想情况下对产生该错误的输入值进行采样;我强烈怀疑您在 1 月 13 日问这个问题并非巧合;您可能想检查昨天的数据是否记录为 12 月 1 日(以及 11 月 1 日星期日等)。然而...继续...

@Startdate varchar(30),    
@enddate varchar(30), 

这里的基本技巧是:不要那样做。并且当然不要只是通过对待它们来盲目地投射这些价值观 "as is"。推荐的方法是在调用层 解析值 ,因此这些值可能变为:

@Startdate datetime,
@enddate datetime,

(或类似;还有其他 date/time 数据类型;它应该匹配 table),并担心调用代码中的格式:

var start = DateTime.Parse[Exact](startText, ...); // some expected format/culture/etc
...
cmd.Parameters.AddWithValue("Startdate", start);

(等等)