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

时间:2010-09-02 14:06:12

标签: 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),
@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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

我有时间超出范围错误,但至少它现在看作是DateTime。

答案 3 :(得分:0)

尝试使用

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

使用格式提供程序 按照

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

或在e.NewValues(“Date_Start”)上粘贴一个断点,看看究竟是什么传递给SQL(或使用SQL Profiler做同样的事情)。

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