لماذا هذا يسبب ArithMeticexception في C# عندما يكون SQLPlus كل شيء على ما يرام

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#؟ :س

هل كانت مفيدة؟

المحلول

أعتقد أنه يجب أن يكون ذلك مع نوع بيانات SQL-Number. يمكنك تجربة الخيار التالي ..

1) .... جولة ((sysdate - l.ExegedReturndate) ، 2) ...

2) تحويل نوع البيانات من "noofdayslate" إلى عدد صحيح.

نصائح أخرى

إذا كنت مهتمًا فقط بجزء من الفرق بين التاريخين ، فيجب عليك استخدام Datediff بدلاً من ذلك ...

على سبيل المثال: Datediff (yy ، startDate ، enddate) yearspassedSincestart

يعود لا. من سنوات مرت منذ تاريخ البدء.

على غرار العثور على عدد من الأشهر ، استخدم "M" كـ DatePart أو "D" لتحديد لا. أيام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top