我有连接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)....圆形((sysdate -l。

2)将“ Noofdayslate”的数据类型转换为整数。

其他提示

如果您只是对两个日期之间的某些部分感兴趣,那么您应该改用日期化。

例如:日期(YY,Startdate,终结者)的年份经过Sincestart

返回第自开始日期以来过去的几年。

类似地,要查找月数,请使用“ m”作为datePart或“ d”来确定否。几天。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top