2010-06-26 33 views
1

我有連接4臺爲什麼這個事業在C#中ArithmeticException時的sqlplus一切ok

CREATE VIEW BookCopyInfo 
AS 
SELECT 
    bc.BookCopyID, b.BookTitle, m.FirstName || ' ' || m.LastName AS BorrowedBy, 
    l.expectedReturnDate, (SYSDATE - l.expectedReturnDate) AS NoOfDaysLate 
FROM Book b, Member m, Lending l, BookCopy bc 
WHERE b.BookID = bc.BookID AND l.MemberID = m.MemberID 
    AND l.BookCopyID = bc.BookCopyID 

有一個小的日期計算要對發現有多少天是一本書晚視圖

(SYSDATE - l.expectedReturnDate) 

當我做了SELECT * FROM BookCopyInfo,我得到這樣

4 | Human Computer Interaction | Alan Paul | 10-JUL-10 | -13.642292 

行,以便它是正確的, -13實際上是正確的答案。

DESC BookCopyInfo返回

Name          Null? Type 
----------------------------------------- -------- --------------- 

BOOKCOPYID        NOT NULL NUMBER(38) 
BOOKTITLE         NOT NULL VARCHAR2(100) 
BORROWEDBY           VARCHAR2(126) 
EXPECTEDRETURNDATE      NOT NULL DATE 
NOOFDAYSLATE          NUMBER(38) 

然而在C#

DataTable dtBookInfo = new DataTable(); 
da = new OracleDataAdapter("SELECT * FROM BookCopyInfo", con); 
da.Fill(dtBookInfo); 

捕獲在da.Fill線

OverflowException異常是由用戶代碼未處理的異常。
算術運算導致溢出。

爲什麼它在SQLPlus中正常工作,但在C#中失敗? :S

+0

如果你用一個常量替代'(SYSDATE-l.expectedReturnDate)',那麼它是否工作(在你的視圖中說'0 AS NoOfDaysLate'?只是爲了確保日期計算實際上導致你的問題... – 2010-06-26 09:12:04

+0

是的。該應用程序運行正常,0 AS NoOfDaysLate:S – 2010-06-26 09:31:46

回答

1

我相信它必須使用SQL-Number數據類型。你可以試試下面的選項..

1)....回合((SYSDATE - l.expectedReturnDate),2)...

2)轉換 「NoOfDaysLate」 的數據類型爲整數。

+0

如何在Oracle 11g中執行轉換? – 2010-06-26 09:32:26

+0

舍入取得了訣竅:) Thanx a million :) – 2010-06-26 09:36:48

+0

@Ranhiru:不客氣。 – 2010-06-26 09:39:36

1

如果你是在這兩個日期之間的差值的某些部分有興趣,那麼你應該使用DateDiff的,而不是...

如: DATEDIFF(YY,的startDate,結束日期)YearsPassedSinceStart

回報沒有。自開始日期過去的幾年。

類似於查找月數,使用'm'作爲日期部分或'd'來確定no。的日子。

+0

DATEDIFF不是一個Oracle函數...這是SQL Server。 – jordanwillis 2017-07-07 15:25:06

相關問題