亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在.net中以編程方式設置連接字符串?

如何在.net中以編程方式設置連接字符串?

精慕HU 2019-11-13 15:35:55
我想以編程方式設置連接字符串,而絕對不更改任何配置文件/注冊表項。我有這段代碼,但不幸的是,它拋出了“配置為只讀”異常。ConfigurationManager.ConnectionStrings.Clear();string connectionString = "Server=myserver;Port=8080;Database=my_db;...";ConnectionStringSettings connectionStringSettings =   new ConnectionStringSettings("MyConnectionStringKey", connectionString);ConfigurationManager.ConnectionStrings.Add(connectionStringSettings);編輯: 問題是我有從配置讀取連接字符串的現有代碼。因此,手動或通過資源設置配置字符串似乎不是有效的選項。我真正需要的是一種以編程方式修改配置的方法。
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

我已經在博客中的帖子中對此進行了撰寫。訣竅是使用反射來戳值,以獲取對非公共字段(和方法)的訪問。


例如。


var settings = ConfigurationManager.ConnectionStrings[ 0 ];


var fi = typeof( ConfigurationElement ).GetField( "_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic );


fi.SetValue(settings, false);


settings.ConnectionString = "Data Source=Something";


查看完整回答
反對 回復 2019-11-13
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

我一直在尋找相同問題的答案,以允許用戶通過選擇本地SQL Server來更改單擊一次應用程序中的連接字符串。


下面的代碼顯示了一個用戶窗體,該窗體與所有本地可用的SQL Server聯系并允許他們選擇一個。然后,它為該服務器構造一個連接字符串,并從表單上的變量返回它。然后,代碼會修改配置文件并節省下來。


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))

}


查看完整回答
反對 回復 2019-11-13
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

解決此問題的另一種方法是直接對集合進行操作:


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);


查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 521 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號