OleDb.ExecutReader

Afik17

New member
OleDb.ExecutReader

חייב Connection פתוח ? כתבתי פונקציה בתוך Class Libaby שמקבלת סטרינג המכיל משפט select ב sql, מגדירה OleDbConnection מגדירה OleDbCommand עם ה OleDbConnection שהוגדר קודם + סטרינג ה select (שניהם בקונסטרקטור). מגדירה OleDbDataReader (נקרא לו X). פותחת את הקונשיין, מבצעת OleDbEecuteReader ל OleDbCommand, ומציבה את ערך ההחזרה לתוך משתנה מקומי X. סוגרת את הקונקשיין ועושה DISPOSE לקונקשיי + OleDbCommand. ומבצעת בסוף return X אך בתוך התוכנית הראשית אני לא יכול לבצע X.Read מכיוון ש"פ הבנתי הוא דורש שהקונקשיין יהיה פתוח. * האם הבנתי נכון את השגיאה ? * ואם כן, מדוע זה ? התפיסה צריכה להיות Disconnected Model, לא ? * כיצד עדיין אני יכול לבצע א הפעולה בתוך ה Class Libraby ולא להעביר את הקוד לתוח התוכנית הראשית ?
 

Afik17

New member
טעות בכותרת, היא מבלבלת :

ברור שלביצוע ה ExecuteReader צריך את הקונקשיין פתוח, הכוונה היא לאחר ביצוע הפקודה הנ"ל, כשהצבתי את ערך ההחזר לתוך משתנה מקומי, ואני רוצה לבצע לו Read,מדוע אז צריך את הקשר פתוח... (פרטים נוספים בהודעה הקודמת :))
 

gilad g

New member
כי ככה זה

כדי לקרוא נתונים מ-DataReader, הוקנקשן חייב להיות פתוח. DataReader היא השיטה הכי מהירה לקריאה מהמסד נתונים.. היא קוראת רשומה-רשומה, ובהתאם שולפת רשומה-רשומה. איך תוכל לשלוף רשומות מהמסד נתונים אם החיבור שלך סגור?
 

gilad g

New member
מודל Disconnected זה נחמד,

אבל יחסית, הוא איטי. אין פה חוכמות - כשאתה מעתיק כמות גדולה של נתונים מ-DB כלשהו לתוך זיכרון, זה עולה הרבה, לכן צריך להשתמש בו בתבונה, ולא בכל הזדמנות שיש. אם אתה רוצה מהירות לך על DataReader. אם אתה רוצה סקלביליות ומודל Disconnected, לך, כמובן, על ה-DataSet/DataAdapters, וכו'.
 

gilad g

New member
כן, הוא רק מקשר,

אבל בדר"כ הוא נמצא בשימוש בד בבד עם DataSet.
 
למעלה