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

Sql 将数据类型nvarchar转换为datetime时出错,sql,vb.net,sqldatasource,Sql,Vb.net,Sqldatasource,使用Vb.net/SQL Server 2000通过gridview/sqldatasource更新行 存储过程: @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), @ModifiedB

使用Vb.net/SQL Server 2000通过gridview/sqldatasource更新行

存储过程:

@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"))

我不明白还有什么地方会搞砸。如果它已经是一个空值,我希望能够将其保持为空值,我只是想让它立即获取任何内容,这就是我的所在。

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

要解决问题,请将其作为varchar(n)参数传入datetime值,并在过程中检查是否有效,甚至将错误值记录到日志中。一旦您看到错误的值,您的问题/解决方案就会更加明显。

由于某种原因,该参数被设置为“字符串”。当正确设置为:

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

我收到时间超出范围的错误,但至少现在它将其视为日期时间。

尝试使用

Convert.ToDateTime(e.NewValues("Date_Start"))
使用格式提供程序 依照

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


如果您可以将传递给SP的内容张贴出来,问题可能会更加明显。

好的建议,但在这种情况下不会发生这种情况,如果我能让它以任何格式接收,我会很高兴。