2011-10-11 38 views
0

我們有一個特定的數據庫,其中包含一些員工信息,並且我只寫了一個小類來訪問這些信息。該類包含一個應用程序配置文件,該文件具有到數據庫的連接字符串。這個項目只有3個文件。 兩個.cs文件和一個App.config文件。從其他項目引用dll,鍵入初始化程序異常

app.config文件中有這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="connString" value="server=myserver;uid=mysa;pwd=mypwd;database=mydb"/> 
    </appSettings> 
</configuration> 

我的一個CS文件,我有一個類,像這樣:

namespace Employees.DAL 
{ 

    public static class DAL 
    { 
     private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["connString"].ToString(); 


     public static Employee GetEmployeeByID(long EmpID) 
     { 
      Employee e = null; 

      using (SqlConnection con = new SqlConnection(connString)) 
      { 
       using (SqlCommand cmd = new SqlCommand("EMPDLL_selEmployeeByID", con)) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.Add("@LoginID", SqlDbType.BigInt).Value = EmpID; 
        con.Open(); 

        using (SqlDataReader reader = cmd.ExecuteReader()) 
        { 
         if (reader.HasRows) 
         { 
          if (reader.Read()) 
          { //todo: implement Employee class 
           e = new Employee((long)reader["LoginID"] 
               ); 
          } 

         } 
        } 
       } 
      } 

      return e; 
     } 
    } 
} 

相當簡單只是從數據庫中抓取一個記錄,並作出了員工,這是Employee.cs類中的:

namespace Employees.Objects 
{ 
    public class Employee 
    { 
     /// <summary> 
     /// ID of employee. 
     /// </summary> 
     public long LoginID { get; private set; } 

     public Employee(long LoginID) 
      { 
      this.LoginID = LoginID; 
      } 
    } 
} 

現在我所做的是創建一個新的控制檯項目t在vs2010中,我添加了對我構建的這個.dll文件的引用,即Employees。我需要這樣做,因爲我必須將其編寫爲可重用類,以便其他人可以包含它。

於是我只是做了一些簡單的控制檯應用程序是這樣的:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Employees.DAL; 
using Employees.Objects; 

    namespace ConsoleEmployeesTest 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       try 
       { 
        Employee e = DAL.GetEmployeeByID(68); //fails right here... 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine(e.ToString()); 
       } 
       Console.ReadLine(); 
      } 
     } 
    } 

我得到一個異常

System.TypeInitilizationException:爲Employees.DAL.DAL類型初始化拋出

異常 - > System.NullReferenceException:對象引用未設置爲對象的實例。

對象。

這是因爲新的應用程序沒有看到app.config文件?

+0

其中是connString定義? – ChrisBint

+0

@ChrisBint - 正如我所說它在app.config文件中。 – oJM86o

+0

在'private static readonly string connString'處設置一個斷點我確信它無法讀取配置。 – Vivek

回答

1

考慮將配置文件作爲資源添加到DLL中,然後在運行時將值從資源中讀出。

+0

謝謝你,應該工作得很好。 – oJM86o