SQLPlusがすべて問題ない場合、なぜこれがC#で算術Xceptionを引き起こすのですか

StackOverflow https://stackoverflow.com/questions/3123308

質問

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

役に立ちましたか?

解決

SQL-Numberデータ型で必要だと思います。次のオプションを試すことができます。

1)。

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

他のヒント

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

例:datediff(yy、startdate、enddate)yearsedsincestart

NOを返します。開始日以来経過した年の。

同様に、月数を見つけるために、「M」を日付パートとして使用するか、「D」を使用してnoを決定します。日の。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top