2010-09-02 92 views
0

使用Vb.net/SQL Server 2000中通过一个GridView更新行/ SqlDataSource的错误转换数据类型为nvarchar为datetime

存储过程:

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

我不明白在哪里可能会搞砸。我希望能够保持它为空值,如果它已经是一个,我只是试图让它采取任何东西,这是我在哪里。

回答

0

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

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

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

1

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

+0

很好的建议,但是在这种情况下不会发生这种情况,如果我能以任何格式获取它,我会很高兴。 – Shawn 2010-09-02 14:13:12

0

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

0

尝试使用

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

使用的格式提供 按

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

或贴在e.NewValues断点( “DATE_START”),并清楚地看到正在传递什么到SQL(或使用SQL Profiler来执行相同的操作)。

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

相关问题