Server.MapPath....

Zeliran

New member
Server.MapPath....

יש לי Class Library שמהווה את שכבת ה DAL, אני רוצה ליצור אובייקט מחרוזת שיהיה const שיכיל בתוכו את ה connection string לבסיס נתונים הבעיה היא שאני לא יכול להשתמש שם ב Server.MapPath מאחר שהוא אינו מכיר בו.. כיצד אפשר להשתמש בו בכל זאת או לעקוף את הבעיה? (בסיס הנתונים הוא ברגע זה מסוג אקסס, אם הוא יהיה msSQL יהיה הבדל מבחינה זאת?)
 

Zeliran

New member
../images/Emo4.gif

לא יצא לי לעבוד יותר מדיי עם ה machine.config למטרות כאלו אז מן הסתם נתקעתי במשהו.. אז הוספתי קובץ machine.config והוא נראה עכשיו כך:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="appSettings" type="System.Web.Configuration.NameValueSectionHandler"/> </configSections> <appSettings> <add key="CS" value="**MY CONNECTION STRING" /> </appSettings> </configuration>​
וכשאני רוצה לקבל את הערך של ה connection string אני משתמש בשורה הבאה:
ConfigurationSettings.AppSettings["CS"]​
עכשיו יש לי מספר שאלות 1. כשאני יוצר אובייקט של oleDbConnection ואני שם את השורה שרשמתי למעלה בתור ה connection string אני מקבל את השגיאה ConnectionString Property was not initalized 2. כשאני מנסה להכניס את אותה שורה למשתנה שהוא גם const יש שגיאה מאחר שאני צריך שמשתנה const יהיה שווה לערך const..איך אפשר לסדר זאת? 3. אם אני רושם ב connection string שנמצא ב machine.config משהו כמו
+Server.MapPath("DB PATH")​
אז זו בעצם שגיאה כי לא נותנים לי להכניס סימנים כמו +
help?
 

nirtheking

New member
נצל"ש

סליחה על הבורות (אני חדש בנושא) אבל מה זה שכבת DAL ?
 

Zeliran

New member
Data Access Layer

השכבה הכי נמוכה וקרובה לבסיס הנתונים.. היא זו שמבצעת את כל ה"תקשורת" בין התוכנית לבסיס הנתונים
 

Zeliran

New member
../images/Emo41.gifשאלה נוספת

יש לי קובץ ascx של שמכיל את התפריט של האתר, אני טוען אותו דינמית מתוך בסיס הנתונים עד עכשיו כתבתי את התפריט בתוך עמוד ה aspx עצמו וכך קיבלתי את סוג המשתמש (admin וכו'..) אבל עכשיו כשהוא נמצא בקובץ נפרד כ ascx איך הוא יכול לדעת איזה משתמש צופה באתר וע"י כך הוא ידע איזה תפריט לטעון?
 

gilad g

New member
שתי אופציות:

לתת מאפיין לפקד ascx שלך, שמציין את שם המשתמש.
לשמור את שם המשתמש ב-Session (בראיה יותר כוללנית, זה עדיף).
 

Zeliran

New member
Dispose?

יש לי מחלקה הנמצאת בתוך Class Library שאיני יכול לעשות לה Dispose, וכאשר אני מנסה לקרוא ל Finilaize אני גם לא מצליח ובטוח הודעת השגיאה הוא מעז להציע לי להשתמש ב Dispose
אז איך אפשר למחלקה לעשות Dispose? מדוע לחלקם יש את המתודה בעוד שלאחרות אין?
 

gilad g

New member
אי אפשר להכריח מחלקה לעשות Dispose

יש כמה מחלקות שאין להם unmanaged resources שבשימוש, ולכן לא צריך לעשות להן Dispose.
 

Zeliran

New member
ואם למשל...

לאחר שסיימתי להשתמש באובייקט של המחלקה, אני משווה אותו ל null, זה ישנה משהו? יודיע ל GC שסיימתי להשתמש בו ואז הוא כבר יטפל בו? ואם אנחנו כבר בנושא, קראתי כאן לפני כמה זמן שכדאי להשוות משתנים מסוג string למשל ל null אחרי שמסיימים להשתמש בהם, אז יופי... אבל מה קורה עם משתנים שהם לא string כגון int, double ודומיהם... יש דרך להשיג את אותה המטרה גם בהם?
 

pagis

New member
אם תשווה אותו ל NULL

ובהנחה שכל האובייקט של הזכרון מנוהל (או שהחלקים הלא מנוהלים מטופלים ב destructor) ברגע שירוץ ה GC.COLLECT הזכרון שלך יתפנה. ה GC.COLLECT ירוץ במקרה שתזום ריצה שלו (רצוי להימנע מזה ככל האפשר, כבד, רע בעייתי וכו') או כשיהיה חסר זכרון (אתה רוצה להימנע ממצב כזה) או כשהתוכנית שלך תסיים לרוץ (זה המצב הטבעי) בקיצור, התפקיד שלך הוא לפנות זכרון לבד כשאתה עובד עם יישומים צורכי זכרון (דוגמת הצפנה או עיבוד תמונה)
 

pagis

New member
DISPOSE

קודם כל, כתבתי כאן לא מזמן משהו על כל נושא ניהול הזכרון, כולל התיחסות להשוואת משתנים ל NULL (נתתי דוגמה של STRING אבל זה נכון לכל טיפוס, ההבדל היחיד הוא שכשאתה משנה ערך של משתנה מטיפוס STRING מוקצה בזכרון אובייקט חדש, כשאתה משנה, בעזרת הצבה או פעולה מתמטית, ערך במשתנה מספרי, אותו זכרון שהוקצה מנוצל ע"י שינוי הערכים המוצבים). נדמה לי שגלעד הוסיף את זה ל FAQ של הפורום. בקשר ל DISPOSE, כעקרון אובייקטים שמחזיקים unmanaged resources אמורים לרשת ולממש את IDISPOSABLE, מה שאומר שתיהיה להם פונקציית DISPOSE, דרך אגב, אם אובייקט שלך מחזיק MEMBERS שיש להם unmanaged resources (כלומר מממשים את IDISPOSABLE) אתה גם אמור לממש אותו כדי לאפשר שחרור שלהם בסוף השימוש, אם אתה לא עושה את זה אתה אמור לשחרר אותם בדיקונסטרקטור אבל אז כל מה שהוא UNMANAGED ישוחרר רק כש GC.COLLECT ירוץ מה שעלול ליצור בעיות. בכל מקרה חשוב מאוד מאוד להקפיד לשחרר משאבים לא מנוהלים! אני מניח שמי שהגיע לדוט נט מתוך ++C וכו' מבין בדיוק למה אני מתכוון אבל תוכניתנים שנולדו לתוך העולם של זכרון מנוהל עלולים לא להבין כמה זה חשוב, אז אני מדגיש, חשוב מאוד!
 

Zeliran

New member
Multiple Connections?

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

Zeliran

New member
כלומר...

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

gilad g

New member
זה "פיצ'ר" שיש לאקסס

לא תיתקל באותה בעיה, כי פתיחת מסד הנתונים ע"י אקסס היא שונה מפתיחתו בעזרת OLEDB/ODBC. כששני משתמשים ייכנסו בו זמנית לאתר שלך (ויפתחו את מסד הנתונים בו זמנית), לא תהיה שגיאה. אתה מוזמן לנסות:
OleDbConnection c1 = new OleDbConnection(...); OleDbConnection c2 = new OleDbConnection(...); c1.Open(); c2.Open();​
 
למעלה