none
בעיה ביצירת Sql Connection למסד הנתונים מסוג SQL SERVER RRS feed

  • שאלה

  • אני עובד עם מסד נתונים מסוג SQL SERVER באתר שלי שמתוכנת בשפת ASP.NET. הגדרתי נתיב חיבור למסד הנתונים דרך קובץ הגדרות האתר.

    אני עובד בתצורת גרסאות- כלומר, אתמול עבדתי על גרסא 3.6 וכים אני עובד על גרסא 3.7 על מנת שאם תהיה תקלה כלשהי אני תמיד יוכל לחזור כמה גרסאות אחורה ולבדוק את הבעיה.

    הבעיה שלי היא שכאשר אני מבצע שאילתה למסד הנתונים הוא אומר לי שזה לא יכול ליצור חיבור למסד הנתונים מכיוום שהדטה בייס קיים בגרסא הקודמת (3.6) והוא אינו יכול להגדיר את הדטה בייס העדכני כמסד הנתונים שבו הוא ישתמש. מה אני עושה?

    מצ"ב תמונות של הודעת השגיאה:

    [URL=http://www.siz.co.il/][IMG]http://up354.siz.co.il/up3/iu4xmwzzwe3y.png[/IMG][/URL]

    [URL=http://www.siz.co.il/][IMG]http://up354.siz.co.il/up2/jmfzyyzdmljw.png[/IMG][/URL]

    זה משהו בנתיב של החיבור! ניסיתי להחליף דטה בייס (מחקתי את הקודם ושמתי חדש) ועדיין הנתיב לא טוב!
    יש מצב נראה אני עושה משהו לא טוב בעמוד של הWEB.CONFG (יש תמונה) בהגדרה של הנתיב בין הSQLCONNECTION לקובץ דטה בייס?
    צריך לתת את כל הנתיב החל מהכונן במחשב- כל התיקיות- המקום שבו שמור האתר- APP_DATA--> DATABASE.MDF או רק את הנתיב בתוך האתר?

    תמונה של הWEB.CONFIG:

    [URL=http://www.siz.co.il/][IMG]http://up354.siz.co.il/up3/ddyu5y2oduzz.png[/IMG][/URL]

    מה אני צריך לעשות בכדי לפתור את זה?

    יום ראשון 24 יוני 2012 19:30

תשובות

  • כרגע אין לי זמן להתעמק, בזה אז הורדתי את הקובץ כרגע -> פתחתי רק את קובץ הקונפיגורציה למבט חטוף רק בשורה אחת של שרשרת ההתחברות וכבר אני רואה בעיה! הסמן קריאה נועד להבהיר לך עד כמה חשוב כשאתה שואל שאלה לספק פרטים כמו קוד רלוונטי. זה יכול להפוך דיון של כמה ימים לחצי דקה של איתור בעיה!

    1. כדי לעבוד עם user instance אתה חייב לעבוד עם מסלול יחסי ולא מסלול מוחלט כמו שיש לך בשרשרת ההתחברות. כך שלפני הכל תהפוך את המסלול המוחלט למסלול יחסי תוך שימוש במוסכמות של סימון של תקיית App_Data

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

    מסלול מלא אצלך:

    AttachDbFilename='C:\Users\User\Desktop\Internet3.9\School_Website_Project\School_Website_Project\App_Data\WebSiteDatabase.mdf'

    מסלול יחסי:

    AttachDbFilename=|DataDirectory|\WebSiteDatabase.mdf

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

    2. בשלב הבא נראה שבכלל לא קראת מה שכתבתי בהודעה שמתחילה במשפט "אין בעיה לשחזר את הבעיה :-) עכשיו שרואים את הודעת השגיאה" וחבל :-(
    כתבתי במפורש למעלה להוריד את החלק של ה Initial Catalog אם הוא קיים וגם את החלק של המאפיין Database אם קיים בשרשרת ההתחברות. הסברתי שזה מקור הבעיה למעשה כי אתה מגדיר שם מסויים ולכן נוצרים לך הסתירות. ברירת המחדל היא לתת ל VS ליצור שם בצורה דינאמית. לכן תוריד את החלק של:

    Initial Catalog=Messages
    3. מדוע יש לך 2 שרשראות התחברות לאותו מסד נתונים?!? משהו בקוד שלך לא הגיוני. אם אתה עובד בפרוייקט עם מסד נתונים אחד אז אתה צריך שרשרת התחברות אחת בלבד בעקרון (יש סיבות מתקדמות לכמה שרשראות התחברות אבל כרגע אני לא אכנס לזה). מה גם שאתה עושה שימוש בשמות שונים למסד הנתונים בכל שרשרת התחברות ולא ניתן לרשום פעמיים מסד נתונים בודד (קובץ אחד) עם 2 שמות שונים.

    תבדוק אם הנקודות הבאות פתרו את הבעיה :-)


    signature

    • נערך על-ידי pituachMVP, Editor יום שלישי 26 יוני 2012 12:16
    • סומן כתשובה על-ידי ELY_626_Jango יום שלישי 26 יוני 2012 14:12
    יום שלישי 26 יוני 2012 12:12
    מנחה דיון

כל התגובות

  • ערב טוב

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

    מכיוון שאין את התמונות אני לא בטוח בבעיה אבל הנה כמה נקודות (חלק לא קשורות לבעיה עצמה)

    * אתה לא מתכנת בשפת ASP.NET מהסיבה שלא קיימתץ שפה כזו. זה שם של טכנולוגיה שאפשר לעבוד איתה בשפות רבות כמו F#,C#,VB.NET ועוד. לכן כשאי לציין באיזה שפה אתה עובד בנוסף לאיזה טכנולוגיה כדי שאם מישהו ירצה לצרף לך קוד הוא יוכל לעזור בשפה שאתה מבין

    * ASP.NET היא כאמור טכנולוגיה אבל היא התפצלה ל 2 טכנולוגיות מאוד שונות בשם MVC וכן  WEB FORM, לכן כדאי לציין באיזה מהטכנולוגיות אתה עובד ב ASP.NET (ההבדדלים והגישה מאוד שונים)

    * לפי ההסבר אני מנחש את הבעיה עד שנוכל לראות תמונות. אם אתה עובד עם פרוייקטים המנוהלים בגרסאות שונות ואתה מחזיק מסד נתונים היושב על השרת עצמו אז עלייך לעבוד עם אותו מסד נתונים. אבל אם אתה עובד עם מסד נתונים המוגדר רק בפרוייקט עצמו בגישה ישירה לקובץ (אני מנחש שזה מה שאתה עושה) אב אתה צריך בבכל גרסה להחזיק מסד נתונים אחר בתוך הפרוייקט של הגרסה ולא לעבוד עם אותו מסד נתונים בדרך כלל (חשוב בעיקר אם עובדים בטכנולוגיות כמו Entity Framwork Code First)

    נסה להעלות את התמונות שוב ואולי נוכל לעזור יותר :-)


    signature

    יום ראשון 24 יוני 2012 21:32
    מנחה דיון
  • היי,

    תפתח את ה SQL MANAGER ואז תראה אם יש לך כבר את הבסיס נתונים מחובר.

    לפי מה שאני מבין לכל גרסה יש לך בסיס נתונים שונה בעל אותו שם.

    ואתה מנסה לעשות attach לאחד מבלי שעשית dettach לשני כך נוצרה התנגשות.

    כמובן שאפשר לעשות את זה בפקודות SQL אבל הרבה יותר קל לעשות את זה עם ה GUI של ה SQL.

    יום שני 25 יוני 2012 05:48
  • זה תלוי אם הוא עובד עם בסיס נתונים כקובץ או דרך השרת

    ההבדלים גדולים

    בדרך כלל בעבודה עם VS כמו שאתה יודע עובדים עם קובץ SQL שאינו רשום בכלל בשרת בצורה קבועה, אלא נמצא למשל בתקייה של הפרוייקט תחת תקייה App_Data. זו ברירת המחדל של ה VS. כמו שכתבתי מעל במקרה זה לכל גרסה אמור להיווצר קובץ נפרד התואם לגרסה של הפיתוח (מאוד חשוב לוודא את זה במקרה של עבודה עם ORM) ויותר חשוב מזה שהוא לא יוכל כניראה לעשות dettach מכיוון שהקובץ אינו רשום בכלל בשרת בצורה קבועה ועובדים איתו בצורה של גישה לקובץ:

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SchoolContext.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"


    signature

    יום שני 25 יוני 2012 11:35
    מנחה דיון
  • שמתי לך את התמונות שיהיה לך קל יותר.

    נראה שגרסה 3.6 מחוברת ואז הוא לא נותן ל 3.7 להתחבר.

    אז או שהאובייקט  הישן עדיין פעיל.

    או שהקובץ עדיין נעול בכל מקרה צריך לשחרר אותו.

    יום שני 25 יוני 2012 11:48
  • מכיוון שאני לא מצליח לראות מהתמונות את כל הקוד אז מצ"ב לינק למשהו דומה.

    בהצלחה....

    http://forums.asp.net/t/1430594.aspx/1

    יום שני 25 יוני 2012 11:55
  • 1.

    ערב טוב

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

    מכיוון שאין את התמונות אני לא בטוח בבעיה אבל הנה כמה נקודות (חלק לא קשורות לבעיה עצמה)

    * אתה לא מתכנת בשפת ASP.NET מהסיבה שלא קיימתץ שפה כזו. זה שם של טכנולוגיה שאפשר לעבוד איתה בשפות רבות כמו F#,C#,VB.NET ועוד. לכן כשאי לציין באיזה שפה אתה עובד בנוסף לאיזה טכנולוגיה כדי שאם מישהו ירצה לצרף לך קוד הוא יוכל לעזור בשפה שאתה מבין

    * ASP.NET היא כאמור טכנולוגיה אבל היא התפצלה ל 2 טכנולוגיות מאוד שונות בשם MVC וכן  WEB FORM, לכן כדאי לציין באיזה מהטכנולוגיות אתה עובד ב ASP.NET (ההבדדלים והגישה מאוד שונים)

    * לפי ההסבר אני מנחש את הבעיה עד שנוכל לראות תמונות. אם אתה עובד עם פרוייקטים המנוהלים בגרסאות שונות ואתה מחזיק מסד נתונים היושב על השרת עצמו אז עלייך לעבוד עם אותו מסד נתונים. אבל אם אתה עובד עם מסד נתונים המוגדר רק בפרוייקט עצמו בגישה ישירה לקובץ (אני מנחש שזה מה שאתה עושה) אב אתה צריך בבכל גרסה להחזיק מסד נתונים אחר בתוך הפרוייקט של הגרסה ולא לעבוד עם אותו מסד נתונים בדרך כלל (חשוב בעיקר אם עובדים בטכנולוגיות כמו Entity Framwork Code First)

    נסה להעלות את התמונות שוב ואולי נוכל לעזור יותר :-)



    אני מתכנת בסביבה בשפת C#.

    התמונות הועלו למטה.

    אני משתמש בטכנולוגית WEB FORMS.

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



    2.

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

    איך אני פותח אותו? בכל פעם שאני פותח גרסא חדשה אני משנה את הנתיב של המיקום למסד הנתונים. איך אני עושה DETTACH? איך אני פותח את הSQL GUI? איך אני עושה בו  DETTACH?




    3.

    זה תלוי אם הוא עובד עם בסיס נתונים כקובץ או דרך השרת

    ההבדלים גדולים

    בדרך כלל בעבודה עם VS כמו שאתה יודע עובדים עם קובץ SQL שאינו רשום בכלל בשרת בצורה קבועה, אלא נמצא למשל בתקייה של הפרוייקט תחת תקייה App_Data. זו ברירת המחדל של ה VS. כמו שכתבתי מעל במקרה זה לכל גרסה אמור להיווצר קובץ נפרד התואם לגרסה של הפיתוח (מאוד חשוב לוודא את זה במקרה של עבודה עם ORM) ויותר חשוב מזה שהוא לא יוכל כניראה לעשות dettach מכיוון שהקובץ אינו רשום בכלל בשרת בצורה קבועה ועובדים איתו בצורה של גישה לקובץ:

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SchoolContext.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"


    signature

    אצלי הוא נמצא בתיקית ה APP_DATA.הוא רשום באיזור הWEB.CONFIG - הנתיב.
    יום שני 25 יוני 2012 15:24
  • אין בעיה לשחזר את הבעיה :-) עכשיו שרואים את הודעת השגיאה. זו בעיה נפוצה כשעובדים עם גרסאות על ידי העתקת כל התקייה של הפרוייקט.

    אני אנסה להגיע לכתוב על זה בלוג בהקדם כולל כיצד לשחזר את הבעיה (בעיקרון פשוט העתק והדבק לכל הפרוייקט והפעלת שני הפרוייקטים במקביל), הסבר,וכמובן פתרון :-)

    בינתיים... אני מקווה שהנקודות הבאות יעזרו

    * אם מריצים 2 פרויקטים במקביל והם זהים (למשל על ידי העתקה) אז יש לוודא שלא מוגדר להם לרוץ תחת אותו PORT אחרת אתם ניגשים בעצם לפרוייקט אחד בלבד (הגדרה במאפיינים של הפרוייקט תחת הטאב של WEB)

    * הפתרון של הוספת

    Initial Catalog=DataBaseName

    לא אמור לפתור את העיניין אלא הפוך בעקרון יש לנקות חלק זה אם הוא קיים בשירשור

    * כמו כן הגדרה של שם בצורה הבאה יש לנקות:

    Database=DataBaseName

    בקצרה מה שקורה זה שאנחנו עובדים ב VS בברירת המחדל (כמו שניסיתי להסביר למעלה) עם מסד נתונים בצורת קובץ או בשם היותר מקצועי local sql express database ולא עם מסד נתונים הרשום בשרת בצורה קבועה.

    במצב כזה מסד הנתונים שלנו לא רשום בשרת עצמו בצורה קבועה (שים לב למילה קבועה שרשמתי כבר בהודעות למעלה עוד לפני שצירפת את התמונה). לכן אנחנו לא יכולים למשל לפתוח את ה SSMS בצורה פשוטה עם החיבור הרגיל שלנו ולבצע למסד הנתונים DETTACH בעזרת שאילתה. אם תריצו שאילתה למציאת כל מסדי הנתונים הרשומים בשרת הוא לא יהיה ברשימה בכלל. נסו להריץ את אחת השאילתות הבאות בזמן שהפרוייקט רץ ועדיין הוא לא יהיה ברשימה (כולן יחזירו את רשימת מסדי הנתונים בשיטות שונות):

    EXEC sp_databases
    SELECT name FROM sys.databases
    SELECT name FROM sys.sysdatabases
    EXEC sp_msForEachDB 'PRINT ''?'''

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

    AttachDbFilename

    אבל עתה אנחנו מנסים לרשום מסד נתונים בשם דומה ועל אותו User Instances (זה המושג שכל הסיפור מתחבא אחריו) ולכן נוצרת הבעיה (SQL EXPRESS מרחיב את המושג INSTANCE ומאפשר לנו ליצור User Instances ולכן לא מצאנו את מסד הנתונים שלנו רשום ב INSTANCE הראשי כשנכנסנו דרך ה SSMS). דרך אגב מילה מהצד: ב 2012 יש התקדמות בנושא זה גם בגרסאות שאינן EXPRESS.

    AttachDBFilename משמש אותנו להגדיר חיבור של מסד הנתונים ל  user instance באופן דינאמי. כשאנחנו עובדים עם user instance אנחנו לא אמורים לקבוע שם למסד הנתונים ועלינו לאפשר לשרת לקבוע את השם בצורה אוטומטית. אם היינו עובדים עם 2 משתמשים שונים הרי שלא היתה נוצרת לנו הבעיה (לכל אחד היה נוצר INSTANCE שלו). אם היינו עובדים עם 2 שמות לא היתה נוצרת לנו הבעיה. ואם לא נקבע שמות אז לא נוצרת לנו הבעיה

    הערה אחרונה להיום: ל DBA שרוצים להתעמק בנושא הרי שכדאי להכיר את ה DMV הבא בעזרתו ניתן למצוא את ה user instances שיש לנו ופרטים עליהם ואז ניתן לגשת אליהם ישירות: dm_os_child_instances


    signature

    יום שני 25 יוני 2012 19:13
    מנחה דיון
  • המסקנות שלך נכונות :-)

    ההסבר רשמתי בקצרה למטה


    signature

    יום שני 25 יוני 2012 19:14
    מנחה דיון
  • אין בעיה לשחזר את הבעיה :-) עכשיו שרואים את הודעת השגיאה. זו בעיה נפוצה כשעובדים עם גרסאות על ידי העתקת כל התקייה של הפרוייקט.

    אני אנסה להגיע לכתוב על זה בלוג בהקדם כולל כיצד לשחזר את הבעיה (בעיקרון פשוט העתק והדבק לכל הפרוייקט והפעלת שני הפרוייקטים במקביל), הסבר,וכמובן פתרון :-)

    בינתיים... אני מקווה שהנקודות הבאות יעזרו

    * אם מריצים 2 פרויקטים במקביל והם זהים (למשל על ידי העתקה) אז יש לוודא שלא מוגדר להם לרוץ תחת אותו PORT אחרת אתם ניגשים בעצם לפרוייקט אחד בלבד (הגדרה במאפיינים של הפרוייקט תחת הטאב של WEB)

    * הפתרון של הוספת

    Initial Catalog=DataBaseName

    לא אמור לפתור את העיניין אלא הפוך בעקרון יש לנקות חלק זה אם הוא קיים בשירשור

    * כמו כן הגדרה של שם בצורה הבאה יש לנקות:

    Database=DataBaseName

    בקצרה מה שקורה זה שאנחנו עובדים ב VS בברירת המחדל (כמו שניסיתי להסביר למעלה) עם מסד נתונים בצורת קובץ או בשם היותר מקצועי local sql express database ולא עם מסד נתונים הרשום בשרת בצורה קבועה.

    במצב כזה מסד הנתונים שלנו לא רשום בשרת עצמו בצורה קבועה (שים לב למילה קבועה שרשמתי כבר בהודעות למעלה עוד לפני שצירפת את התמונה). לכן אנחנו לא יכולים למשל לפתוח את ה SSMS בצורה פשוטה עם החיבור הרגיל שלנו ולבצע למסד הנתונים DETTACH בעזרת שאילתה. אם תריצו שאילתה למציאת כל מסדי הנתונים הרשומים בשרת הוא לא יהיה ברשימה בכלל. נסו להריץ את אחת השאילתות הבאות בזמן שהפרוייקט רץ ועדיין הוא לא יהיה ברשימה (כולן יחזירו את רשימת מסדי הנתונים בשיטות שונות):

    EXEC sp_databases
    SELECT name FROM sys.databases
    SELECT name FROM sys.sysdatabases
    EXEC sp_msForEachDB 'PRINT ''?'''

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

    AttachDbFilename

    אבל עתה אנחנו מנסים לרשום מסד נתונים בשם דומה ועל אותו User Instances (זה המושג שכל הסיפור מתחבא אחריו) ולכן נוצרת הבעיה (SQL EXPRESS מרחיב את המושג INSTANCE ומאפשר לנו ליצור User Instances ולכן לא מצאנו את מסד הנתונים שלנו רשום ב INSTANCE הראשי כשנכנסנו דרך ה SSMS). דרך אגב מילה מהצד: ב 2012 יש התקדמות בנושא זה גם בגרסאות שאינן EXPRESS.

    AttachDBFilename משמש אותנו להגדיר חיבור של מסד הנתונים ל  user instance באופן דינאמי. כשאנחנו עובדים עם user instance אנחנו לא אמורים לקבוע שם למסד הנתונים ועלינו לאפשר לשרת לקבוע את השם בצורה אוטומטית. אם היינו עובדים עם 2 משתמשים שונים הרי שלא היתה נוצרת לנו הבעיה (לכל אחד היה נוצר INSTANCE שלו). אם היינו עובדים עם 2 שמות לא היתה נוצרת לנו הבעיה. ואם לא נקבע שמות אז לא נוצרת לנו הבעיה

    הערה אחרונה להיום: ל DBA שרוצים להתעמק בנושא הרי שכדאי להכיר את ה DMV הבא בעזרתו ניתן למצוא את ה user instances שיש לנו ופרטים עליהם ואז ניתן לגשת אליהם ישירות: dm_os_child_instances


    signature

    אז המ אני עושה על מנת לפתור את הבעיה פיזית?

    מה אני עושה בכל פעם שאני מגדיר גרסא חדשה? מה אני יכול לעשות כרגע על הגרסא הנכוחית כדי שהוא יתחבר למסד הנתונים מהגרסא הנכונה?

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

    מה אני צריך לשנות בWEB.CONGFIG שלי?

    אם אפשר בבקשה הסבר במילים פשוטות בשלב אחרי שלב של מה שצריך לעשות. פשוט לא הבנתי את כל המושגים שאמרת פה.

    תודה רבה מראש!


    • נערך על-ידי ELY_626_Jango יום שני 25 יוני 2012 20:34
    יום שני 25 יוני 2012 20:32
  • א. כתבתי שאתה לא מספק לנו מספיק נתונים ואפילו שרשרת התחברות לא נתת לנו. אני פועל רק לפי ניחוש והכרות של בעיה נפוצה וידועה (בעצם אולי לא כל כך ידועה למפתחים כי זה מתקשר לצד של השרת SQL והתנהגות מאחורי הקלעים יותר, ואולי פחות ידועה ל DBA שמנסיוני לא מתמחים בגרסת האקספרס או בצד של הפיתוח שיוצרת את הבעיה, אבל ידועה למי שיש לו את 2 הכובעים של פיתוח + DBA להערכתי)

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

    ג. בשום אופן לא כתבתי לבצע DETTACH! זה משהו שכתב מישהו אחר. ההפך הוא הנכון :-) תקרא שוב לעומק מה שכתבתי! אני כתבתי חלק שלם עם קודים שמתחיל במילים "לכן אנחנו לא יכולים " בנושא של DETTACH. אני הסברתי שזו לא הדרך הנכונה ושככל הנראה גם לא תמצא את מסד הנתונים בשרת ב INSTANCE הרגיל שלו כדי לבצע DETTACH (אני יוצא מתוך הנחה שאתה עוסק בפיתוח ולא ב DBA ולכן למשל לא שולט במושג DMV ובעבודה עם DMV-ים)...

    אנא קרא לעומק מה שכתבתי שוב :-) אני מבין שלא תמיד המושגים ברורים ולכן אני אנסה לנסח את הדברים יותר בפשטות כשיהיה לי זמן להכין דוגמאות מעשיות ומדריך מתאים. קשה לעבוד באוויר (זה קושי שאתה יצרת לנו למשל כשלא העלת את הפרוייקט/קודים/נתונים מינימליים של כיצד אתה עובד בתהחברות וכו').

    * הערה: כאמור זה לא יהיה מחר אבל אני אנסה בסוף השבוע להעלות בלוג בנושא אם יהיה לי זמן וכוח עם יותר פירוט ודוגמאות אבל הפתרון הבסיסי יש לך כאן.


    signature


    יום שני 25 יוני 2012 23:18
    מנחה דיון
  • http://www.mediafire.com/?466fco9i3d64mpv

    העלתי את קובץ של האתר שלי. מה שזיהית כבעיה כניחוש נראה לי נכון! ממה שהבנתי ממך ני צריך לשנות את הדרך\הנתיב\השרשור להתחברות לדטה בייס בדף הWEB.CONFIG של הפרויקט שלי.

    מה בדיוק אני צריך להחליף\לשנות\להוריד?

    סליחה על הטרטור אני פשוט חייב לדעת בדיוק מה לעשות!

    יום שלישי 26 יוני 2012 10:30
  • http://www.mediafire.com/download.php?466fco9i3d64mpv
    יום שלישי 26 יוני 2012 10:31
  • כרגע אין לי זמן להתעמק, בזה אז הורדתי את הקובץ כרגע -> פתחתי רק את קובץ הקונפיגורציה למבט חטוף רק בשורה אחת של שרשרת ההתחברות וכבר אני רואה בעיה! הסמן קריאה נועד להבהיר לך עד כמה חשוב כשאתה שואל שאלה לספק פרטים כמו קוד רלוונטי. זה יכול להפוך דיון של כמה ימים לחצי דקה של איתור בעיה!

    1. כדי לעבוד עם user instance אתה חייב לעבוד עם מסלול יחסי ולא מסלול מוחלט כמו שיש לך בשרשרת ההתחברות. כך שלפני הכל תהפוך את המסלול המוחלט למסלול יחסי תוך שימוש במוסכמות של סימון של תקיית App_Data

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

    מסלול מלא אצלך:

    AttachDbFilename='C:\Users\User\Desktop\Internet3.9\School_Website_Project\School_Website_Project\App_Data\WebSiteDatabase.mdf'

    מסלול יחסי:

    AttachDbFilename=|DataDirectory|\WebSiteDatabase.mdf

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

    2. בשלב הבא נראה שבכלל לא קראת מה שכתבתי בהודעה שמתחילה במשפט "אין בעיה לשחזר את הבעיה :-) עכשיו שרואים את הודעת השגיאה" וחבל :-(
    כתבתי במפורש למעלה להוריד את החלק של ה Initial Catalog אם הוא קיים וגם את החלק של המאפיין Database אם קיים בשרשרת ההתחברות. הסברתי שזה מקור הבעיה למעשה כי אתה מגדיר שם מסויים ולכן נוצרים לך הסתירות. ברירת המחדל היא לתת ל VS ליצור שם בצורה דינאמית. לכן תוריד את החלק של:

    Initial Catalog=Messages
    3. מדוע יש לך 2 שרשראות התחברות לאותו מסד נתונים?!? משהו בקוד שלך לא הגיוני. אם אתה עובד בפרוייקט עם מסד נתונים אחד אז אתה צריך שרשרת התחברות אחת בלבד בעקרון (יש סיבות מתקדמות לכמה שרשראות התחברות אבל כרגע אני לא אכנס לזה). מה גם שאתה עושה שימוש בשמות שונים למסד הנתונים בכל שרשרת התחברות ולא ניתן לרשום פעמיים מסד נתונים בודד (קובץ אחד) עם 2 שמות שונים.

    תבדוק אם הנקודות הבאות פתרו את הבעיה :-)


    signature

    • נערך על-ידי pituachMVP, Editor יום שלישי 26 יוני 2012 12:16
    • סומן כתשובה על-ידי ELY_626_Jango יום שלישי 26 יוני 2012 14:12
    יום שלישי 26 יוני 2012 12:12
    מנחה דיון
  • תודה רבה רבה רבה!

    הצלחתי ליצור קישור לדטה בייס והוא כביכול מעביר את נתונים לתוך מסד הנתונים כמו שצריך!

    הכל עובר בסדר אבל משום מה שהנתונים לא באמת מוכנסים לטבלת הרשומות של מסד הנתונים!

    מה אני עושה?

    **תיקון: לאחר שעשיתי קישור למס הנתונים והגדרתי חיבור ידני אליו- (OPEN CONNECTION)

    אז הוא הגדיר לי את אותו מסד הנתוניים רק בשם : DataBase.mdf1 במקום למסד הנתונים : DataBase.mdf.

    דגש על ה.mdf1.למה זה קורה ואיך אני מחזיר את החיבור  DataBase.mdf?

    הוא בעצם יצר מסד נתונים חדגש באותו השם רק עם הMDF1 בסוף מבקום MDF והוא מעביר את כל הנתונים אליו!
    • נערך על-ידי ELY_626_Jango יום שלישי 26 יוני 2012 15:17
    יום שלישי 26 יוני 2012 14:33
  • it is just renamed file, as you can not have two files of same name its name is changed to


    signature

    יום שלישי 26 יוני 2012 17:23
    מנחה דיון
  • it is just renamed file, as you can not have two files of same name its name is changed to


    signature

    OK, אז איך אני עושה שהוא לא יישלח את הנתונים לשם אלא למסד הנתונים המקורי (בלי ה1 בסוף השם).
    יום שלישי 26 יוני 2012 17:51
  • זה ידחה כרגע...
    אני צריך לעבור על הקוד :-)
    למשל חשוב לדעת אם אתה עובד עם ORM של EF CODE FIRST ועוד כמה נתונים כדי לקבוע למה נוצר לך מסד נתונים חדש

    כמו כן יכול להיות פשוט שמסד הנתונים הקודם כבר היה רשום ב user intance שלך בגלל כל המשחקים שנעשו עד כה. ומכוון שאי אפשר לרשום את אותו קובץ פעמיים אז ה VS יצר עותק למסד הנתונים (ככה הוא מתנהג) ואז רשם את מסד הנתונים החדש. יכול להיות שיהיה צורך בפעולה יותר מתקדמת של כניסה דרך ה SSMS ל USER INSTANCE על מנת לסדר את הדברים או שפשוט העתקה והדבקה של התקייה (כאילו גרסה נוספת) תסדר את העניין בגרסה הבאה. כמו כן יכול להיות שהשרשת ההתחברות החדשה שלך עדיין לא תקינה או שבגלל שאתה עדיין עושה שימוש בכמה שרשראות חיבור עם שמות שונים (משהו שהצעתי לתקן) יוצר בהרח יצירת מסדי נתונים שונים כי לא יכולים להיות 2 שמות לאותו מסד נתונים... בכל מקרה תבדוק שהשרשרת התחברות שלך פונה לקובץ בשם המקורי :

    AttachDbFilename=|DataDirectory|\WebSiteDatabase.mdf

    האפשרויות רבות כרגע...
    אתה יכול לשים לנו את השינויים שעשית בעקבות ההסברים עד כה ואני אתעמק בזה בהמשך. רק את הקובץ בו עשית שינוי

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


    signature

    יום רביעי 27 יוני 2012 06:04
    מנחה דיון
  • לא משנה! הכל עובד נפלא!!

    תודה רבה רבה רבה על העזרה! זאתי הייתה עבודת בית ספר שלי שאני עושה עליה\איתה בגרות מחר!!

    תודה רבה!

    אפשר לסגור!

    יום רביעי 27 יוני 2012 15:44
  • תודה על התודה :-)

    את הסגירה אתה עושה על ידי כך שאמרת תודה :-)
    מבחינתי הנושא סגור :-)

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

    שכחתי להגיד בהצלחה בבגרות. תספר לנו איך היה


    signature

    יום רביעי 27 יוני 2012 16:06
    מנחה דיון