2010-03-09 28 views
9

Có thể thay đổi giá trị ConnectionString trong app.config khi chạy không? Theo the MSDN documentation nó có thể là thuộc tính ConnectionString "Gets hoặc thiết lập chuỗi kết nối."Bạn có thể thay đổi giá trị cấu hình ConnectionString khi chạy không?

Mã của tôi trông như thế này:

ConnectionStringSettings mainConnection = ConfigurationManager.ConnectionStrings["mainConnection"]; 
mainConnection.ConnectionString = "Data Source=SERVER;Initial Catalog=" + NewDatabaseName + ";Integrated Security=True"; 

Các lỗi mà tôi nhận được là: "Unhandled Exception: System.Configuration.ConfigurationErrorsException:. Các cấu hình được chỉ đọc"

+0

Ông có thể giải thích tại sao bạn lại muốn chuyển sang cơ sở dữ liệu/chuỗi kết nối tại thời gian chạy?. – ram

+0

Tôi đang di chuyển nội dung từ một phiên bản cũ của thư viện sang phiên bản mới của thư viện- cả hai phiên bản đều sử dụng cùng một tên chuỗi kết nối nhưng tôi muốn đọc từ một cơ sở dữ liệu và ghi vào cơ sở dữ liệu khác. –

+0

Tôi vừa mới nhận ra mình đã viết web.config trong bài viết của mình, ý tôi là app.config (cập nhật để phản ánh sự thay đổi). –

Trả lời

17
Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
    myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text; 
    myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text; 
    myConfiguration.Save(); 

Ref: http://www.beansoftware.com/ASP.NET-Tutorials/Modify-Web.Config-Run-Time.aspx

+6

+1: chỉ cần sửa đổi nhỏ: nếu bạn muốn đọc lại giá trị mới từ tệp cấu hình một lần nữa mà không cần khởi động lại ứng dụng, hãy làm mới tệp sau khi lưu tệp bằng cách gọi: * System.Configuration. Quản lý cấu hình.RefreshSection ("connectionStrings"); * –

+4

Điều này làm việc, mặc dù tôi đã ở trong một ứng dụng giao diện điều khiển vì vậy tôi đã phải sử dụng một dòng khác nhau: Cấu hình myConfiguration = ConfigurationManager.OpenExeConfiguration (exeFilePath); Lưu ý rằng điều này sẽ thay đổi tệp cấu hình vật lý. –

0

Không thực sự chắc chắn lý do tại sao bạn muốn thay đổi liên tục web.config của mình khi chạy (không được khuyến nghị), nhưng hãy xem tại đây để biết thêm thông tin.

Writing to .NET Web.config

Điều quan trọng ở đây là web.config của bạn cần phải đã đọc và viết permissons cho tài khoản rằng quá trình ASPNET đang chạy như.

+0

Bạn không chắc chắn tại sao điều này lại bị giảm giá. Bạn đã cung cấp một đề nghị cho biết rằng đây không phải là thực hành tốt, và cũng cung cấp thêm đọc về vấn đề mà OP yêu cầu. – gcoulby

-1

Tôi đoán những gì bạn đang nhìn thấy là một lỗi biên dịch, và không phải là một lỗi thời gian chạy. Lớp bạn đang sử dụng là một phương thức được tạo ra từ các thiết lập ứng dụng của bạn, và các thuộc tính được tạo ra chỉ có một getter trên thuộc tính và không có setter. Đó là lý do tại sao bạn nhận được lỗi đó.

Để thay đổi thuộc tính, bạn cần sử dụng lớp Cấu hình và sử dụng thuộc tính AppSettings, chuyển chuỗi cho khóa. Sau đó, bạn có thể gọi phương thức Configuration.Save.

+1

Đó là một ConnectionStringSetting, không phải là một AppSetting, và nó chắc chắn không phải là một lỗi biên dịch. Điều kỳ lạ là tài liệu nói rằng tôi có thể * đặt * giá trị. –

-1

Thay đổi chuỗi kết nối bằng cách sử dụng web.config khi chạy không được khuyến nghị.
Tôi khuyên bạn nên duy trì các kết nối này trong một tệp khác và triển khai trình xử lý tệp để xác minh xem giá trị của các thông số này có thay đổi hay không.

0

ConnectionStrings-Section là chỉ đọc. Tôi chỉ cần thay đổi trong phiên, ví dụ: truy vấn cơ sở dữ liệu với một tài khoản chỉ đọc và sau khi cập nhật/sửa đổi hợp lệ các hoạt động với một tài khoản được cấp.

Vì vậy, giải pháp của tôi là một connectionString tại appSettings-Section, có thể được sửa đổi trong thời gian chạy.

Trong Web.config: <appSettings> <add key="dbconnectionstr" value="Database=...;Host=...;Password=...;Username=..."/> </appSettings>

Tại SqlDataSource: <asp:SqlDataSource ID="datasource1" runat="server" ConnectionString="<%$ AppSettings:dbconnectionstr %>" .... </asp:SqlDataSource>

Và tại Mã: WebConfigurationManager.AppSettings["dbconnectionstr"] = newonnectionString;

Các vấn đề liên quan