2010-09-02 423 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的內容,那麼問題可能更爲明顯。

相關問題