שאלה כללית על 2.0 ASP.net

Seraphim

New member
שאלה כללית על 2.0 ASP.net

שוב שלום, ידעתי שאני אחזור עם עוד שאלות, אני רוצה קודם להודות שוב לכל מי שעזר לי פעם שעברה, האתר עובד מצויין עכשיו ואין מאושר ממני. יש לי עוד שאלה בנושא אבל הפעם כללות יותר ולא ספציפית לבעיות שיש לי. לגבי הControl שנקרא asp:AccessDataSource, הבנתי מה הרעיון, הבעיה היא שבמידה והמיקום של הDB במחשב שונה מהשרת אז אני צריך להחליף כל פעם מחדש את הערך בDataFile בכל דף בנפרד כדי לראות אותו לוקלית ולשנות חזרה כדי שהוא יעבוד בשרת. בשיטה הרגילה אני פשוט מחליף בGlobal כידוע... ולאחר ההקדמה הזאת השאלה היא האם אפשר לקשר גלובלית בAccessDataSource? אולי לעשות משהו כמו Include? תודה מראש לעונים.
 

yonigold

New member
תשובתי

את הקישור לDB שלך אתה שם בקובץ חיצוני כמשתנה גלובלי לאתר. אפשר וכדאי ב-WEB.CONFIG. http://aspalliance.com/820 מכאן יש לך שתי אפשרויות: 1. לשים שם נתיב יחסי לקובץ הACCESS ואז אתה בכלל לא צריך לשנות במעבר מפיתוח לPRODUCTION (איך מתרגמים את זה לעברית). למשל: DATAFOLDER/DB/MYDB.MDB 2. לשים נתיב מלא לקובץ הACCESS ואז תצטרך פשוט לשמור שני עותקים של WEB.CONFIG, אחד לפיתוח ואחד ל PRODUCTION (איך לעזאזל מתרגמים את הדבר הזה?). פשוט וקל.
 

Seraphim

New member
הבתני את הכוונה שלך אבל

לא יודע אם זו אמורה להיות בעיה אבל בשרת הסידור שונה מהסידור במחשב. הם דורשים לינק אבסולוטי לתיקיה Database שיושבת מחוץ לWebroot שבה יש את שאר הקבצים. לוקאלית יש לי תיקיה של האתר ובתוכה את התיקיה Database. בכל אופן לא ניתן לעבוד עם MapPath במקרה שלי ולכן הקישור חייב להיות מלא. ברמת העיקרון כמו שאמרתי, אין לי בעיה להמשיך לעבוד כמו שתמיד עבדתי וכמו שהצעת באופציה השניה רק שאצלי הקישור נמצא בGlobal ואני פשוט רשמתי שם 2 שורות ואני כל פעם מבטל אחת במעבר מפיתוח ל"הפקה" (אולי ככה זה נקרא בעיברית?
לא יודע...) זה נראה ככה:
'Dim sPath As String = "c:\sites\single11\seraphim2\database\db.mdb" (מיקום הקובץ על השרת) Dim sPath As String = "C:\Inetpub\wwwroot\SalvationSnow\Database\db.mdb" (מיקום הקובץ על המחשב)​
עכשיו כל מה שאני מריך לעשות זה פשוט "להפעיל" כ פעם שורה אחרת. השאלה שלי היתה לגבי האופציה של קישור לDB ע"י AccessDataSource, איך אני מקשר מספר פקדים כאלה שנמצאים בדפים שונים לאותו DB בלי לקשר כל אחד ואחד ספציפית?
 

yonigold

New member
מה פירוש GLOBAL?

מה זאת אומרת "רק שאצלי הקישור נמצא בGlobal"? GLOBAL.ASAX?? אין דרך סבירה להפעיל אובייקט שרוצה לפנות ל-DB בלי להגיד לו איפה זה נמצא... אם אתה ממש מתעקש אתה יכול ליצור מחלקה שתירש מ-ACCESSDATASOURCE ובאתחול שלה היא תשיג את הערך הזה מהקובץ, בצורה הזאת הדפים שלך יפנו לאובייקט החדש. לא הייתי עושה את זה. מיותר. כולה שורת קוד.
 

Seraphim

New member
כן - GLOBAL.ASAX

הקישור לDB שלי מוגדר שם. יש לי בקובץ Global.asax את הביטוי הבא בsession_start:
'Dim sPath As String = "c:\sites\single11\seraphim2\database\db.mdb" Dim sPath As String = "C:\Inetpub\wwwroot\SalvationSnow\Database\db.mdb" Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0; DATA Source=" & sPath & ";" Dim objConn As OleDbConnection objConn = New OleDbConnection(connString) Session("cnnStr") = connString objConn.Open()​
ואני מבצע בכל דף קישור ככה:
Dim myConnection As New OleDbConnection(Session("cnnStr").ToString()) וכו'........​
באופן הזה אני פשוט עובד עם השורה השניה "פעילה" על המחשב, השורה הראשונה היא הקישור לקובץ כפי שהוא מופיע על השרת. הבעיה שלי הוא לא "שורת קוד", תראה, נניח ואני בונה דף אחד, יוצר בו גריד אחד ומקשר אותו ככה:
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/Database/DB.mdb"...​
אז זו לא בעיה, אני בונה את זה, מעצב את העבמוד וכו', לפני שאני מעלה מחליף את הערך של DataFile לקישור האבסולוטי של הקובץ על השרת כמו שדורשים בשרת, זהו. אבל עכשיו נסה לדמיין 30 גרידים? לפעמים 4-5 בכל דף... עכשיו כל פעם שאני רוצה לעדכן משהו בדף אני צריך להשנות את הערך של DataFile ולהחזירו לפני שאני מעלה חזרה לשרת??? לא יעיל במיוחד...
 

yonigold

New member
OK

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