טיפ: שינוי ConnectionString של TypedDataSet בזמן ריצה
-
מישהו שאל אותי על זה, וכיון שזה שימושי חשבתי לכתוב כאן לתועלת הכלל
(בדיוק לאחרונה נזקקתי לכך ולקח לי זמן למצוא איך עושים את זה).[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)