שאלה קטנה בעניני DB

שוLמית

New member
../images/Emo41.gifועוד שאלה, אם אפשר...../images/Emo41.gif

יש לי כמה דפי WebForm ואני רוצה מכולם להתחבר לאותו DB, האם מכל דף אני צריכה לפתוח את ה-Connection מחדש
או שיש דרך לפתוח את ה-Connection באופן גלובלי לאפליקציה. תודה לכולם שולמית
 

שוLמית

New member
למה זה עוזר?

איך אני יכולה לפתוח connection ע"י המשתנים האלו? חשבתי שאפשר לשמור שם רק strings, לא?
 

adam222

New member
אז

את יכולה להגדיר אובייקט מסוג sqlConnection ולאחסן אותו שם...
 

שוLמית

New member
רגע

אתה אומר שבעמוד הראשון שנפתח אני מגדירה את ה-Connection, שומרת אותו במשתנה של Application ואז בהמשך עמודים הבאים אני משתמשת במשתנה הזה ולא צריכה לפתוח את ה-Connection כל פעם מחדש. הבנתי נכון
ממש תודה
 

adam222

New member
נכון

אבל אני לא בטוח שזו הדרך הנכונה לעשות דברים. מכיון שעבור כל גולש יהיה לך משתני Session שונים... כלומר העומס על שרת ה-IIS, יהיה כבד! אני הייתי ממליץ לייצור Class שמטפל בכל החיבורים לבסיס הנתונים, עדכונים ושליפות. ולתת לו לנהל הכל, את רק תקראי לפונקציה ותתני לה מחרוזת SQL והיא נניח תחזיר לך DataTable או מספר הרשומות שהושפעו...
 

שוLמית

New member
לא הבנתי

א. נכון שלכל משתמש יהיו משתני Session שונים, אבל משתני Application קימים רק פעם אחת, לא? ב. class כזה כל פעם שאני קוראת לו בעצם אני עוד פעם מתחברת לDB ויוצרת את ה-Connection מחדש, זה לא בזבוז זמן ומשאבים? וכאן אני חוזרת לשאלה הראשונה, האם יש דרך להגדיר את הClass פעם אחת עבור כל הדפים? תודה רבה
 

adam222

New member
סליחה

התבלבלתי בין הפורום לבין וויכוח בחיים המציאותיים. נעשה סדר בברדאק. משתני Application אכן קיימים רק פעם אחת, אבל להחזיק בהם חיבור ל-DB, זה ביזבוז גדול יותר מאשר פונקציה ששולפת נתונים ומתנתקת. אכן יש דרך להגדיר זאת: (כל השמות ניתנים לשינוי כמובן...) צרי ספריה חדשה בשם Functions בתוכה צרי קובץ חדש DB.cs בתוך הקובץ בתוך ה-Class בשם DB, תכתבי כמה פונקציות שאת רוצה מסוג Public. עכשיו בכל מקום בו את רוצה להשתמש בפונקציה הזו: אם השימוש הוא חד פעמי: namespace.functions.db.functionname אם השימוש הוא יותר מזה: הגדירי Using NameSpace.Functions; ועכשיו בכל מקום שאת צריכה תקראי ל- DB.functionName אני מקווה שזה ברור ולא טעיתי (שוב
) בהצלחה
 

שוLמית

New member
ורק בשביל לחדד

א. הפונקציות האלו צריכות להיות סטטיות? ב. בכל אחת מהפונקציות, תהיה פתיחה של ה-Connection וסגירתו? ג. למה משתני Application זה בזבוז גדול יותר? ממש תודה שולמית
 

adam222

New member
.............

א. כן. ב. כן (אחרת החיסכון הוא לא משמעותי). ג. מכיון שמשתנה Application מאפשר גישה בצורת Q, כלומר אם כרגע יהיו באתר שלך 20 איש, שכולם ביחד ביצעו פעולה כלשהיא הדורשת שימוש באובייקט הזה, מה שיקרה זה, שהוא יסדר אותם בתור וכל אחד בתורו יקבל שימוש באובייקט, רק לאחר שהמשתמש הקודם סיים איתו... עכשיו תחשבי על 200 מתשמשים
 

OnTheRoad

New member
אם אפשר הבהרה

לגבי דוגמא שנתת מקודם כדי לקרוא בעצם לפונקציה שנמצאת בתוך class שנמצא בספרית functions אתה קורא בדרך של namespace.functions.db.functionname א.מדןע בעצם יש עליך להגדיר את שם הספריה בו נמצא הclass? ב.האם בזמן קימפול הפרויקט לא מתבצע בעצם איזהשהי זיהוי של כל הclassים שבהם משתמשים בפרויקט ואז אין צורך בעצם להגדיר שם ספריה.... ג.אם חובה להגדיר שם ספריה אז האם זה מאפשר ליצור אותו class ובתוכו אותה פונקציה ב2 ספריות שונות? ד.שינוי שם ספריה בפרויקט בVS מעדכן אוטומטית בכל הקודים בהם השתמשנו בשם ספריה?
 

adam222

New member
..................

שם הספריה הוא שם ה-Namespace לדוגמא:
projectname.functions​
שמכיל את הקלאס DB כלומר בשביל לפנות אליו מ-Namespace אחר אני זקוק ל:
projectname.functions.DB​
ואם אני צריך פונקצית 'רישום' בתוך הקלאס DB, אזי זה יהיה:
projectname.functions.DB.reg()​
ג. אם זה Namespace אחר, ברור שכן. ד. אין לי מושג, נראה לי שכן, לטעמי: לא מומלץ.
 

OnTheRoad

New member
הבהרה

אם אני יוצר פרויקט ואני יוצר בו מעיין הירכייה של ספריות אזי כדי לקרוא ללclass שנמצא בספריה X מתוך ספריה y עלי לקרוא
X.className​
כאשר בעצם X הוא nameSpace?וכנ"ל גם Y?
 

adam222

New member
בדר"כ

אובייקטים שתיצור תחת ספריה X יקבלו אותו כחלק מה-Namespace, כמובן שניתן לשנות את זה (אבל ב-Default) אם כך, התשובה לשאלתך היא: כן אם אתה ב-Namespace Z ואתה רוצה לקרוא לפונקציה מתוך Namespace אחר, אז עומדות בפניך 2 אפשרויות: 1. לקרוא בשם המלא והארוך של projectName.nameSpace.className.functionName 2. להגדיר שימוש ב-Namespace: using projectName.nameSpace; ואז אתה יכול לקרוא בקיצור ל-className.functionName
 
למעלה