1

4つのテーブルを接続するビューがあります

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

4

2 に答える 2

1

SQL-Number データ型に関係していると思います。次のオプションを試すことができます..

1) .... Round((SYSDATE - l.expectedReturnDate),2 ) ...

2) 「NoOfDaysLate」のデータ型を整数に変換します。

于 2010-06-26T09:25:40.173 に答える
1

2 つの日付の違いの一部に興味がある場合は、代わりに DateDiff を使用する必要があります...

例: DATEDIFF(yy, startDate, endDate) YearsPassedSinceStart

いいえを返します。開始日からの経過年数。

同様に、月数を見つけるには、「m」を日付部分として使用するか、「d」を使用して月数を決定します。日の。

于 2010-06-26T09:33:24.320 に答える