10

Tôi đã tạo ứng dụng bảng điều khiển và tệp app.config và tệp Connections.config. Các file app.config có một nguồn tài sản ConnectionString trỏ đến các Connections.configĐọc chuỗi kết nối từ tệp cấu hình bên ngoài

Khi tôi cố gắng đọc các chuỗi kết nối trong việc áp dụng, tôi nhận được một ConfigurationErrorException

Đây là phương pháp chính của tôi.

static void Main(string[] args) 
    { 
     var settings = ConfigurationManager.ConnectionStrings; 
     if (settings != null) 
     { 
      foreach (ConnectionStringSettings setting in settings) 
      { 
       Console.WriteLine(setting.ConnectionString); 
      } 
     } 
    } 

App.config nộp nộp

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings configSource="Connections.config"></connectionStrings> 
</configuration> 

Connections.config

<?xml version="1.0" encoding="utf-8" ?> 
<connectionStrings> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 

Ở đây tôi quan sát thấy hai điều. Đầu tiên: Nếu tôi chỉ định configSource Tôi không thể đọc chuỗi kết nối (ném ngoại lệ.)

Thứ hai: Nếu tôi đặt cùng một chuỗi kết nối trong tệp App.config và cố đọc thì mã đang hoạt động nhưng nhận được hai kết nối chuỗi (mà nghĩa vụ phải được trở lại chỉ có một mà là chuỗi rỗng) chuỗi kết nối đầu tiên là chuỗi kết nối SQLEXPRESS như thế này

data source=.\SQLEXPRESS;Integrated Security=SSPI; 
    AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

chuỗi kết nối thứ hai nó trở về là chuỗi rỗng (Điều này được dự kiến).

Tôi muốn đọc chuỗi kết nối từ tệp bên ngoài như trong trường hợp của tôi. Làm thế nào để làm điều đó? Tôi đang thiếu gì ở đây?

Trả lời

6

MSDN says:

Đừng bao gồm bất kỳ thêm các yếu tố, các phần, hoặc các thuộc tính.

Bạn cần xóa mã hóa XML.

Sửa

Ngoài ra, bạn cần phải thiết lập các thuộc tính của tập tin cấu hình của bạn để Copy to Output Directory = Copy if newer hoặc Copy always.

enter image description here

Chỉnh sửa 2

Để xây dựng dựa trên những gì Dave cho biết, bạn thêm các yếu tố clear để tập tin bên ngoài của bạn. Tệp Connections.config cuối cùng của bạn phải giống hệt như sau:

<connectionStrings> 
    <clear/> 
    <add name="Name" 
    providerName="System.Data.ProviderName" 
    connectionString="Valid Connection String;" /> 
</connectionStrings> 
+0

Xây dựng Hành động không bắt buộc, Nếu Sao chép vào Thư mục Đầu ra được đặt thành * sao chép luôn * hoặc * sao chép nếu mới hơn *, hãy tạo hành động mặc định thành Nội dung. Nếu không được trả lời tốt - +1 –

+0

Điểm tốt, tôi không biết điều đó. –

5

Kết nối của bạn.tập tin cấu hình nên được như hình dưới đây mà không có tiêu đề xml

<connectionStrings> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 

Ngoài ra cho nó để định vị một cách chính xác các tập tin trong ứng dụng giao diện điều khiển của bạn, xin vui lòng thiết lập Copy to Output mục-Sao chép Luôn hoặc Sao chép Nếu Mới hơn.

+0

tiêu đề xml không tạo ra bất kỳ sự khác biệt nào. thiết lập sao chép luôn giải quyết được vấn đề. Cảm ơn bạn. – PSR

1

Chuỗi kết nối đầu tiên mà bạn đang nhận được được kế thừa từ machine.config. Điều này được mô tả trong tài liệu MSDN. http://msdn.microsoft.com/en-us/library/bf7sd233(v=vs.90).aspx

Bạn có thể sử dụng thẻ Xóa trong tệp cấu hình của mình để xóa chuỗi kết nối kế thừa. http://msdn.microsoft.com/en-us/library/ayb15wz8(v=vs.90).aspx

<connectionStrings> 
    <clear/> 
    <add name="SQLDBConnecion" 
    providerName="System.Data.ProviderName" 
    connectionString="" /> 
</connectionStrings> 
0

Có một bài viết đẹp trên MSDN: https://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx.

Trích dẫn từ bài viết:

Để lưu trữ các chuỗi kết nối trong một tập tin cấu hình bên ngoài, tạo một file riêng biệt mà chỉ chứa phần connectionStrings. Do không bao gồm bất kỳ phần tử, phần hoặc thuộc tính bổ sung nào. Ví dụ này hiển thị cú pháp cho tệp cấu hình bên ngoài.

<connectionStrings> 
    <add name="Name" 
    providerName="System.Data.ProviderName" 
    connectionString="Valid Connection String;" /> 
</connectionStrings> 

Hy vọng điều này sẽ giúp những người chạy vào câu hỏi này sau.

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