代码之家  ›  专栏  ›  技术社区  ›  Shawn

将数据类型nvarchar转换为datetime时出错

  •  0
  • Shawn  · 技术社区  · 16 年前

    存储过程:

    @ISTag varchar(10),
    @PCISTag varchar(10),
    @User varchar(50),
    @Date_Start datetime,
    @Date_End datetime,
    @Status varchar(50),
    @Cost money,
    @Notes varchar(500),
    @CreatedBy varchar(50),
    @ModifiedBy varchar(50)
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
    
        EXEC sp_changeLog 'HardDrive', @ISTag, @ModifiedBy
    
        UPDATE T_HardDrive
            SET PCIStag = @PCISTag,
                [User] = @User,
                Date_Start = @Date_Start,
                Date_End = @Date_End,
                Status = @Status,
                Cost = @Cost,
                Notes = @Notes,
            ModifiedBy = @ModifiedBy
            WHERE ISTag = @ISTag
    

    在参数被传递到sp之前,我要确保它的格式正确。

    e.NewValues("Date_Start") = Convert.ToDateTime(e.NewValues("Date_Start"))
    

    4 回复  |  直到 16 年前
        1
  •  1
  •   Mladen Prajdic    16 年前

    使用日期时间.TryParse将字符串转换为日期。否则你会遇到日期本地化问题,人们会在DMY、MDY或YMD中键入日期,等等。。。

        2
  •  0
  •   KM.    16 年前

    要解决这个问题,请将它作为varchar(n)参数传递到datetime值中,并在过程中使用 ISDATE (Transact-SQL) 要查看它是否有效,甚至可以将错误值记录到日志中。一旦你看到不好的价值,你的问题/解决方案就会更加明显。

        3
  •  0
  •   Dave    16 年前

    尝试使用

    Convert.ToDateTime(e.NewValues("Date_Start"))
    

    使用格式提供程序

    http://msdn.microsoft.com/en-us/library/9xk1h71t.aspx

    或者在e.NewValues(“Date\u Start”)上粘贴一个断点,查看到底传递给SQL的是什么(或者使用SQL Profiler执行相同的操作)。

    如果您可以发布传递给SP的内容,那么问题可能会更明显。

        4
  •  0
  •   Shawn    16 年前

    由于某种原因,参数被设置为“String”。正确设置为:

    <asp:Parameter Name="Date_Start" Type="DateTime" />
    

    我得到了时间超出范围的错误,但至少它现在把它看作一个日期时间。