2014-05-21 17 views
5

Tôi có một ứng dụng mà được dữ liệu đến các hình thức thông qua một dataLayer trong đó sử dụng một cái gì đó như thế này:ConfigurationManager chuỗi kết nối là null trong UserControl

public DataTable get(String query, ArrayList parameters = null) 
{    
    using (iDB2Connection cn = new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ToString())) 
    { 
     // get the data and return them  
    } 
} 

tôi có các hình thức mà có được dữ liệu và điều này hoạt động tốt.

Tuy nhiên, tôi đã tạo UserControl nhận dữ liệu thông qua phương pháp này hoạt động tốt khi tôi chạy dự án của mình, tuy nhiên, biểu mẫu chứa UserControl ném ngoại lệ thiết kế.

"Để ngăn ngừa mất dữ liệu càng tốt trước khi tải các nhà thiết kế, các lỗi sau đây phải được giải quyết:"

tôi thấy rằng lỗi nằm ở việc thu hồi các chuỗi kết nối từ <appSettings>.

Nó ném ra một nhận dạng nullpointerexception.

Nhưng chỉ ở chế độ thiết kế. Khi tôi bỏ qua nó, mọi thứ vẫn hoạt động tốt, tuy nhiên, tôi muốn biết cách giải quyết vấn đề này.

Tại sao <appSettings> không hoạt động khi truy cập thông qua UserControl của tôi?

UPDATE 1

Dường UserControl của tôi không nhận ra <appSettings> ở tất cả.

Khi tôi đặt mã này trong sự kiện UserControl Load của mình, tôi cũng nhận được một tham chiếu null.

private void SelectUser_Load(object sender, EventArgs e) 
{    
    txtLocation.Text = ConfigurationManager.AppSettings["location"].ToString(); 
} 
+0

Đây có phải là ASP.NET, Winforms hay không? –

+0

Đó là winforms, tôi đã thêm thẻ. – randomizer

+0

Bạn có thể * Đọc * giá trị chuỗi kết nối từ bất kỳ nơi nào khác không? – Kurubaran

Trả lời

2

Tôi tìm thấy giải pháp, trong designMode usercontrol đã thực thi mã trong Load-event. Bởi vì App.config không có sẵn trong designmode nó không được tìm thấy và do đó không được tải. Vì vậy, tôi đã kiểm tra một chút xung quanh để kiểm tra xem có trong mã vạch thiết kế hay không:

bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime); 
if (designMode) 
{ 
    string location = ConfigurationManager.AppSettings["location"].ToString(); 
} 
0

Tôi nghĩ bạn chỉ cần tinh chỉnh cách bạn đang tìm nạp ConnectionString.

using (iDB2Connection cn = new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ConnectionString) 
{ 
    //get the data and return them  
} 
+0

Không, vẫn nhận được "Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng". Thiết lập ConfigurationManager là null trong một usercontrol vì lý do nào đó. – randomizer

1

Bài viết dưới đây mô tả vấn đề này trong biểu mẫu WPF/Win. Hãy có một cái nhìn ...

MS Forum

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