דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. טיפ: שינוי ConnectionString של TypedDataSet בזמן ריצה

טיפ: שינוי ConnectionString של TypedDataSet בזמן ריצה

מתוזמן נעוץ נעול הועבר ארכיון code613m
2 פוסטים 2 כותבים 248 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #1

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

    [size=150:vf9pa0ji][u:vf9pa0ji]רקע[/u:vf9pa0ji][/size:vf9pa0ji]
    כשאנו יוצרים בVisualStudio דטה סט חדש ע"י האשף (Add Data Source), הוא שואל אותנו האם לשמור את הConnectionString כ"הגדרה" או לקודד אותה כפי שהיא במחלקות שנוצרות. בהסבר שם באנגלית הם מנדבים מידע נוסף: אם שומרים את הConnectionString כהגדרה, קל אח"כ לשנות אותה במקרה של נתיב משתנה בהפצת התוכנה.

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

    [size=150:vf9pa0ji][u:vf9pa0ji]פיתרון 1 : במידה ורוצים לשנות מידי פעם (לא קבוע) הConnectionString מכאן ולהבא ולשמור את השינוי להפעלה הבאה[/u:vf9pa0ji][/size:vf9pa0ji]
    הנה הקוד, הוא משנה את ההגדרה של הקונקשיין סטרינג הספציפי:

    var config =  ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
    connectionStringsSection.ConnectionStrings["השם של הקונקשיין שלנו"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah";
    config.Save();
    ConfigurationManager.RefreshSection("connectionStrings");
    

    הקוד הזה מצריך Referance + Using ל System.Configuration.
    שימו לב, פיתרון זה הוא מסורבל ומיותר למקרה שבאופן קבוע אנו רוצים לבחור את מקור הנתונים בזמן ריצה.
    לשם כך הפיתרון השני.

    [size=150:vf9pa0ji][u:vf9pa0ji]פיתרון 2 : כשרוצים שהConnectionString ייקבע בזמן ריצה לפי פרמטר כל שהוא[/u:vf9pa0ji][/size:vf9pa0ji]
    במקרה כזה, בשעת יצירת הדטה סט אפשר לבחור שלא ישמור את הConnectionString כהגדרה כי ממילא לא יעשה בה שימוש.

    ממש פשוט: אחרי כל יצירת דטה אדפטר יש ליצור לו קונקשן סטירנג. ככה לדוגמא:

    var NewDa = new XxxxDataSetTableAdapters.XxxxTableAdapter();
    NewDa.Connection = getConnection();
    

    כאשר הפונקציה getConnection נראית מעין זו:

    System.Data.SqlClient.SqlConnection getConnection()
    {
        if (true) //כאן בחינה/ברירה מה הקונקשיין המתאים
        {
            return new System.Data.SqlClient.SqlConnection("...");
        }
        else
        {
            return new System.Data.SqlClient.SqlConnection("...");
        }
    }
    

    זה רק הדגמה, בפועל עדיף להציב את הקונקשנים במשתנים/מאפיינים ולא ליצור אותם שוב ושוב.

    פורסם במקור בפורום CODE613 ב09/09/2013 16:15 (+03:00)

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

    בכל נושא אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
    • ש מנותק
      ש מנותק
      שמואל
      כתב ב נערך לאחרונה על ידי
      #2

      תודה!
      עזרת מאוד

      פורסם במקור בפורום CODE613 ב16/09/2013 09:12 (+03:00)

      תגובה 1 תגובה אחרונה
      0

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום