SQLPlusがすべて問題ない場合、なぜこれがC#で算術Xceptionを引き起こすのですか
-
30-09-2019 - |
質問
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を決定します。日の。
所属していません StackOverflow