2011-10-11 3 views
0

직원 정보가있는 특정 데이터베이스가 있으며이 정보 중 일부에 액세스하기 위해 작은 클래스를 작성했습니다. 이 클래스에는 데이터베이스에 대한 연결 문자열이있는 응용 프로그램 구성 파일이 포함되어 있습니다. 이 프로젝트에는 3 개의 파일 만 있습니다. 두 개의 .cs 파일과 두 개의 App.config 파일이 있습니다.다른 프로젝트에서 dll을 참조하는 경우 이니셜 라이저 예외가 발생합니다.

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; 
     } 
    } 
} 

은 매우 간단 그냥 DB에서 레코드를 잡고하고한다 :

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

한 나는 수업과 같이 있습니다

app.config 파일이 있습니다 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; 
      } 
    } 
} 

이제는 새로운 콘솔 projec을 만들었습니다. t를 vs2010에서 만들고 필자는 Employee라는이 .dll 파일에 대한 참조를 추가합니다. 다른 사람들이 그것을 포함 할 수 있도록 재사용 가능한 클래스로 써야하기 때문에이 작업을 수행해야합니다. Employees.DAL.DAL의 형식 이니셜이

을 던졌다 : 나는

가 System.TypeInitilizationException 예외를 얻을

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.NullReferenceException : 개체 참조가

개체의 인스턴스로 설정되지 않았습니다.

새 앱에 app.config 파일이 표시되지 않기 때문에이 작업이 수행됩니까?

+0

여기서 connString은 정의되어 있습니까? – ChrisBint

+0

@ChrisBint - app.config 파일 안에 있다고 말했듯이. – oJM86o

+0

'private static readonly string connString'에서 중단 점을 설정합니다. 구성을 읽지 못했습니다. – Vivek

답변

1

DLL에 리소스로 구성 파일을 추가 한 다음 런타임에 리소스에서 값을 읽어보십시오.

+0

감사합니다. 괜찮습니다. – oJM86o

관련 문제