Frage

habe ich einen Blick Anschluss von 4 Tabellen

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

Es gibt eine kleine Datumsberechnungen auf diesen Funden gehen, wie viele Tage waren ein Buch spät

(SYSDATE - l.expectedReturnDate)

Wenn ich eine SELECT * FROM BookCopyInfo tun, bekomme ich Zeilen wie

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

So ist es richtig ist, und -13 ist die richtige Antwort tatsächlich.

DESC BookCopyInfo kehrt

 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------

 BOOKCOPYID                                NOT NULL NUMBER(38)
 BOOKTITLE                                 NOT NULL VARCHAR2(100)
 BORROWEDBY                                         VARCHAR2(126)
 EXPECTEDRETURNDATE                        NOT NULL DATE
 NOOFDAYSLATE                                       NUMBER(38)

Jedoch in C #

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

fängt eine Ausnahme in der da.Fill Zeile

  

Overflow wurde durch Benutzercode nicht behandelte.
  Arithmetische Operation führte zu einem Überlauf.

Warum funktioniert es fein in SQLPlus aber nicht in C #? : S

War es hilfreich?

Lösung

Ich glaube, es muss mit SQL-Datentyp Zahl. Sie können die folgende Option versuchen ..

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

Konvertieren

2), den Datentyp "NoOfDaysLate" auf ganze Zahl.

Andere Tipps

Wenn Sie nur in einem Teil der Differenz zwischen den beiden Daten interessiert sind, dann sollten Sie DateDiff verwenden stattdessen ...

Zum Beispiel: DATEDIFF (yy, startdate, endDate) YearsPassedSinceStart

gibt die Nr. von Jahren seit dem Start Datum überschritten.

Auf ähnliche Anzahl von Monaten zu finden, verwenden Sie ‚m‘ als Datumsteil oder ‚d‘ nicht zu bestimmen. von Tagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top