【问题标题】:conversion of a nvarchar data type to a datetime data type in stored procedure在存储过程中将 nvarchar 数据类型转换为 datetime 数据类型
【发布时间】:2015-03-11 07:06:41
【问题描述】:

当我将开始日期和结束日期的日期日期作为字符串值从文本框传递到 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)    

【问题讨论】:

  • 如果表上的对应值为 datetime 或 datetime2,则应将 Startdate 和 enddate 参数设为 datetime 或 datetime2 类型
  • @startdate@enddate 的价值是什么?由于这两个参数都是varchar 的类型,因此错误的可能原因是从stringdatetime 的无效转换

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


【解决方案1】:

我遇到错误

顶部提示;始终发布确切的错误消息,并在理想情况下对产生该错误的输入值进行抽样;我强烈怀疑您在 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);

(等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多