2010-09-23 30 views
9

Tôi có một assembly C# sử dụng app.config để lưu trữ chuỗi kết nối cơ sở dữ liệu của nó. Khi gỡ lỗi ứng dụng, tôi nhận thấy rằng kết nối đến cơ sở dữ liệu không bị lỗi vì ConfigurationManager tiếp tục trả về chuỗi kết nối machine.config:ConfigurationManager tiếp tục nhận chuỗi kết nối Machine.config

nguồn dữ liệu =. \ SQLEXPRESS; Bảo mật tích hợp; ....

Tôi đã thêm <clear/> trước chuỗi kết nối trong app.config và nó đã khắc phục vấn đề trên máy tính của tôi. Vấn đề được trả lại khi tôi triển khai nó để sản xuất. Ai đó có thể cho tôi biết làm thế nào tôi có thể ngừng chuỗi kết nối machine.config không được sử dụng?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString); 

<connectionStrings> 
    <clear/> 
    <add name="VersionConnectionString" 
    connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"   
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

CẬP NHẬT

Sau đây vẫn mang lại cho tôi những chuỗi kết nối Machine.config ?!

Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
       string dllConfigData = 
        appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString; 
+0

Tôi biết đó là một bài đăng cũ, nhưng tôi vẫn tò mò, đây có phải là ứng dụng dành cho máy tính để bàn hoặc bàn điều khiển không? Bạn có thấy phần chuỗi kết nối với phần tử rõ ràng trong thư mục đầu ra (bin) không? –

+0

Tôi vẫn gặp sự cố trong đơn đăng ký của mình. Tôi đã thêm rõ ràng hoặc sử dụng các mã bên dưới và sao chép tệp cấu hình vào thư mục exe nhưng vẫn đang tìm nạp dữ liệu mặc định. Tôi đang sử dụng VS2015. – Amir

+0

Tôi đã có cùng một vấn đề. Tôi đã có chuỗi kết nối phù hợp trong dự án 'thư viện lớp' mà tôi đã sử dụng và để trống 'web.config' trong dự án 'Web'. Ngay sau khi tôi thêm vào cùng trong dự án web là tốt, nó làm việc tốt cho tôi. Chỉ trong trường hợp nếu bạn có nhiều dự án trong một giải pháp – Sugafree

Trả lời

1

Hãy thử lấy một ví dụ của file app.config của bạn như là một đối tượng Cấu hình:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString; 

này sẽ bỏ qua tập tin cấu hình máy hoàn toàn.

+0

Đây là thư viện lớp (.dll) OpenExeConfig ném và ngoại lệ. Ý tưởng tốt mặc dù. – Nick

+4

Điều đó dường như không thực sự bỏ qua cấu hình máy –

0

Bạn sẽ nhận được chuỗi kết nối của mình bằng NAME thay vì INDEX - điều đó sẽ đảm bảo bạn đang nhận được những gì bạn đang yêu cầu.

Hãy thử

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString); 
+0

bạn nhận được chuỗi kết nối machine.config của bạn khi bạn nhận được nó theo tên? –

4

Khi sử dụng chuỗi kết nối trong một DLL, bạn cần phải thêm chúng vào app.config của exe của bạn là tốt, sử dụng tên chính xác tương tự cho các thiết lập. Sau đó, bạn có thể thay đổi chuỗi kết nối trong tệp .config của exe và DLL sẽ tự động tải lên khi được tải.

Đây có lẽ là cách duy nhất bạn có thể có chuỗi kết nối tùy chỉnh hoạt động trong tệp app.config khi lớp kiên trì DB của bạn được triển khai trong một DLL riêng biệt. Thậm chí không hỏi tôi đã mất bao nhiêu thời gian để nghiên cứu và gỡ lỗi điều này.

2

Tôi biết đây là câu hỏi cũ hơn, nhưng hôm nay tôi cũng gặp vấn đề tương tự. Vấn đề là app.config mà tôi đã thêm vào dự án của tôi đã không được sao chép vào thư mục đầu ra. Để khắc phục điều này, nhấp chuột phải vào app.config và chọn Properties. Sau đó, thay đổi Build Action thành Content. Hy vọng điều này sẽ hữu ích!

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