将nvarchar数据类型转换为存储过程中的日期时间数据类型

时间:2015-01-13 10:43:02

标签: c# mysql sql-server stored-procedures

当我将开始日期和结束日期的日期日期从textbox传递给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)    

1 个答案:

答案 0 :(得分:2)

  

我收到错误

顶尖;始终发布确切的错误消息,并理想地采样创建该错误的输入值;我强烈怀疑你在1月13日提出这个问题并非巧合;你可能想检查一下,昨天的数据没有记录为12月1日(以及11月1日星期日等)。但是......继续......

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

这里的根本诀窍是:不要那样做。当然,不要盲目地通过“按原样”对待它们来盲目地施展这些价值观。建议的方法是解析调用层的值,这样可能会变为:

@Startdate datetime,
@enddate datetime,

(或类似;还有其他日期/时间数据类型;它应该与表匹配),并担心调用代码中的格式:

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

(等)