使用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"))
我不明白其他地方可能搞砸了。如果它已经存在,我希望能够将它保持为空值,我只是想让它现在采取任何措施,这就是我所处的位置。
答案 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的内容,那么问题就更明显了。