दिलचस्प पोस्ट
जावास्क्रिप्ट: लंबी लम्बी संख्या की बिट की ओर से बदलाव ओपनजीएल निम्नतम स्तर पर कैसे काम करता है? मैं क्यों सी # में ICloneable कार्यान्वित करना चाहिए? पायथन में विखंडू (एन) के द्वारा एक इटरेटर को दोहराएं? कैश कैसे सेट करें: गलत jQuery.get कॉल में क्रोम पर फ्लोटिंग पॉइंट नंबर के लिए एचटीएमएल 5 इनपुट टाइप = "नंबर" तत्व WPF स्टार क्या करता है (चौड़ाई = "100 *") सीएसएस के लिए प्राथमिकता का क्रम क्या है? MySQL में JSON के रूप में डेटा संग्रहीत करना चार सरणी में NSString कन्वर्ट डेल्फी रूपांतरण यूनिकोड मुद्दे यूआरएल के लिए पथ। बिना सीएक्स उपयोग और रैम उपयोग कैसे करें? एक तंत्रिका नेट पर स्पष्टीकरण जो सांप का निभाता है हामकेस्ट संग्रह की तुलना करते हैं

मैं नेट पर एक स्ट्रिंग कॉन्फ़िगरेशन स्ट्रिंग कॉन्फ़िगर कैसे सेट करूं?

मैं किसी भी कॉन्फ़िग फाइल / रजिस्ट्री कुंजियों में कोई भी परिवर्तन नहीं के साथ एक प्रोग्रामिंग स्ट्रिंग प्रोग्रामिंग सेट करना चाहता हूं।

मेरे पास कोड का यह टुकड़ा है, लेकिन दुर्भाग्य से यह एक अपवाद फेंकता है "कॉन्फ़िगरेशन केवल पढ़ने के लिए है"

ConfigurationManager.ConnectionStrings.Clear(); string connectionString = "Server=myserver;Port=8080;Database=my_db;..."; ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings("MyConnectionStringKey", connectionString); ConfigurationManager.ConnectionStrings.Add(connectionStringSettings); 

संपादित करें: समस्या यह है कि मेरे पास मौजूदा कोड है जो कॉन्फ़िगरेशन से कनेक्शन स्ट्रिंग पढ़ता है। इसलिए मैन्युअल रूप से कॉन्फ़िग स्ट्रिंग सेट करना, या संसाधन के माध्यम से, मान्य विकल्पों की तरह नहीं लगता मैं वास्तव में क्या जरूरत है विन्यास को प्रोग्रामेटिक रूप से संशोधित करने का एक तरीका है।

Solutions Collecting From Web of "मैं नेट पर एक स्ट्रिंग कॉन्फ़िगरेशन स्ट्रिंग कॉन्फ़िगर कैसे सेट करूं?"

मैंने इसके बारे में मेरे ब्लॉग पर एक पोस्ट में लिखा है गैर-सार्वजनिक क्षेत्रों (और विधियों) तक पहुंच प्राप्त करने के तरीके के रूप में मूल्यों को ढकने के लिए प्रतिबिंब का उपयोग करना है।

जैसे।

 var settings = ConfigurationManager.ConnectionStrings[ 0 ]; var fi = typeof( ConfigurationElement ).GetField( "_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic ); fi.SetValue(settings, false); settings.ConnectionString = "Data Source=Something"; 

मैं एक ही qustion के जवाब के लिए देख रहा था एक उपयोगकर्ता एक स्थानीय एसक्यूएल सर्वर का चयन करके एक क्लिक में कनेक्शन स्ट्रिंग में संशोधन करने के लिए उपयोगकर्ता की अनुमति के बारे में।

नीचे दिए गए कोड एक उपयोगकर्ता प्रपत्र प्रदर्शित करता है, जो स्थानीय स्तर पर उपलब्ध एसक्यूएल सर्वर से संपर्क करता है और उन्हें एक का चयन करने की अनुमति देता है। इसके बाद वह तोड़ने के लिए एक कनेक्शन स्ट्रिंग का निर्माण करता है और फॉर्म पर एक वेरिएबल से देता है। कोड तब कॉन्फ़िग फाइलों में सुधार करता है और इसे बचाता है I

 string NewConnection = ""; // get the user to supply connection details frmSetSQLConnection frm = new frmSetSQLConnection(); frm.ShowDialog(); if (frm.DialogResult == DialogResult.OK) { // here we set the users connection string for the database // Get the application configuration file. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Get the connection strings section. ConnectionStringsSection csSection = config.ConnectionStrings; foreach (ConnectionStringSettings connection3 in csSection.ConnectionStrings) { // Here we check for the preset string - this could be done by item no as well if (connection3.ConnectionString == "Data Source=SQL204\\SQL2008;Initial Catalog=Transition;Integrated Security=True") { // amend the details and save connection3.ConnectionString = frm.Connection; NewConnection = frm.Connection; break; } } config.Save(ConfigurationSaveMode.Modified); // reload the config file so the new values are available ConfigurationManager.RefreshSection(csSection.SectionInformation.Name); return clsDBMaintenance.UpdateDatabase(NewConnection)) } 

मुझे लगता है कि यह मेरे लिए काम करता है:

 Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; if (section != null) { section.ConnectionStrings["MyConnectionString"].ConnectionString = connectionString; config.Save(); } 

यह एक मौजूदा कनेक्शन स्ट्रिंग को अधिलेखित करता है।

इस से संपर्क करने का एक अन्य तरीका सीधे संग्रह पर काम करना होगा:

 var settings = ConfigurationManager.ConnectionStrings; var element = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); var collection = typeof(ConfigurationElementCollection).GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); element.SetValue(settings, false); collection.SetValue(settings, false); settings.Add(new ConnectionStringSettings("ConnectionStringName", connectionString)); // Repeat above line as necessary collection.SetValue(settings, true); element.SetValue(settings, true); 

मैं वर्तमान में देव / प्रॉड बनाम टेस्ट वातावरण में विभिन्न कनेक्शन स्ट्रिंग्स को संभालने के लिए निर्भरता इंजेक्शन का उपयोग कर रहा हूं। मुझे अभी भी वेब कॉन्फ़िग को मैन्युअल रूप से बदलना होगा अगर मैं देव और प्रॉड के बीच में जाना चाहता हूं, लेकिन परीक्षण के लिए मेरे पास आईकननेक्शन स्ट्रिंगफ़ाइटर इंटरफ़ेस है जो एक डिफ़ॉल्ट कार्यान्वयन के साथ होता है जो वेब कॉन्फ़िग को देखता है और वैकल्पिक परीक्षण कॉन्फ़िगरेशन को स्थिर मान देता है। इस तरह जब मैं परीक्षण कर रहा हूं, तो मैं फैक्ट्री को परीक्षण कार्यान्वयन के लिए सेट करता हूं और यह मेरे लिए पूछे जाने वाले कुंजी के लिए परीक्षण कनेक्शन स्ट्रिंग वापस करेगा। अन्यथा यह वेब कॉन्फिग में दिखेगा

मैं इसे देव बनाम उत्पादों के लिए दूसरे कार्यान्वयन में विस्तारित कर सकता हूं, लेकिन मेरे उत्पादन असेंबली में आईकनेक्शन स्ट्रींगफैक्टर के एक एकल कार्यान्वयन और मेरे परीक्षण विधानसभा में परीक्षण कार्यान्वयन के साथ मैं और अधिक आरामदायक हूं।

आप उसे इसके बजाय संसाधन फ़ाइल में डाल सकते हैं। इसमें कॉन्फ़िगरेशन प्रबंधक वर्ग की अंतर्निहित सुविधाएं नहीं होंगी, लेकिन यह काम करेगा।

संसाधनों को मानते हुए:

Resources.Default.ConnectionString = "Server=myserver;" // etc

फिर अपने कोड में:

conn.ConnectionString = Resources.Default.ConnectionString

यह एक हैक है, मुझे पता है।

दिए गए अन्य उत्तरों के अतिरिक्त, और कनेक्शन स्ट्रिंग मानते हुए केवल एक और विन्यास चर या संपूर्ण के रूप में निरंतर नहीं है, तो आप सीधे स्ट्रिंग को एक साथ जोड़ने के बजाय SqlConnectionStringBuilder वर्ग का उपयोग करने पर विचार कर सकते हैं।

संपादित करें: अप, माफ करना, बस ने देखा कि आप मूल रूप से किसी अन्य स्रोत से अपनी कनेक्शन स्ट्रिंग (मुझे पूरा अनुमान) पढ़ना चाहते हैं।

कॉन्फ़िगरेशन प्रबंधक को कॉन्फ़िग फाइल से पढ़ने के लिए उपयोग किया जाता है।

आपका समाधान केवल conn.ConnectionString को conn स्ट्रिंग की आवश्यकता है जिसे आप की आवश्यकता है।