Domanda

Ho una visione che collega 4 tavoli

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

C'è un piccolo aritmetica delle date in corso che trova il numero di giorni era in ritardo di un libro

(SYSDATE - l.expectedReturnDate)

Quando faccio un SELECT * FROM BookCopyInfo, ottengo le righe come

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

Quindi è corretto e -13 è la risposta corretta in realtà.

ritorna 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)

Tuttavia in C #

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

cattura un'eccezione nella linea da.Fill

  

OverflowException è stata gestita dal codice utente.
  operazione aritmetica ha comportato un trabocco.

Perché funziona bene in SQLPlus ma non riesce in C #? : S

È stato utile?

Soluzione

credo che abbia a con SQL-Numero tipo di dati. Si può provare la seguente opzione ..

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

2) Convertire il tipo di dati "NoOfDaysLate" per intero.

Altri suggerimenti

se siete solo interessati a una parte della differenza tra le due date, allora si dovrebbe utilizzare DateDiff invece ...

Ad esempio: DATEDIFF (aa, startDate, endDate) YearsPassedSinceStart

restituisce il no. di anni trascorsi dalla data di inizio.

Allo stesso modo per trovare il numero di mesi, l'uso 'm' come datepart o 'D' per non determinare. di giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top