Sql 将数据类型nvarchar转换为datetime时出错
使用Vb.net/SQL Server 2000通过gridview/sqldatasource更新行 存储过程: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
@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的内容张贴出来,问题可能会更加明显。好的建议,但在这种情况下不会发生这种情况,如果我能让它以任何格式接收,我会很高兴。