2017-12-30 41 views
0

콘솔 응용 프로그램으로 wcf 서비스를 사용하고 있습니다. 계정 번호를 기반으로 계정 정보를 검색하고 싶습니다. 계정 번호를 입력하면 오류없이 메소드를 실행할 수 있지만 콘솔 애플리케이션에서 다음 오류가 발생합니다.콘솔 응용 프로그램에서 값 ''을 (를) 형식으로 구문 분석 할 수 없습니다.

: '메시지를 deserialize하려고 할 때 포맷터가 예외를 throw했습니다. 매개 변수 http://tempuri.org/:AccountBalanceCheekResult을 역 직렬화하려고 시도하는 동안 오류가 발생했습니다. InnerException 메시지가 'System.Boolean 형식의 개체를 deserialize하는 동안 오류가 발생했습니다. ''값을 'Boolean'유형으로 구문 분석 할 수 없습니다. ' 자세한 내용은 InnerException을 참조하십시오. '

다음은 클래스입니다.

[DataContract] 
    public class AccountBalanceRequest : Current_Account_Details 
    { 
     string account_number; 

     [DataMember] 
     public string Account_Number 
     { 
      get { return account_number; } 
      set { account_number = value; } 
     } 
    } 
} 

여기 구현과 나는 ADO.NET 코드에서 어떤 오류도 발견하지 못했습니다.

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 
     { 
      using (SqlConnection conn = new SqlConnection(ConnectionString)) 
      { 
       conn.Open(); 

       var cmd = new SqlCommand("SELECT * FROM Current_Account_Details WHERE Account_Number = '" + accountNumber.Account_Number + "'", conn); 


       cmd.CommandType = CommandType.Text; 

       var reader = cmd.ExecuteReader(); 
       //read the result of the execute command. 
       while (reader.Read()) 
       { 
        //assuming that your property is the same as your table schema. refer to your table schema Current_Account_Details 

        accountNumber.Account_Number = reader["Account_Number"].ToString(); 
        accountNumber.Account_Creation_Date = reader["Account_Creation_Date"].ToString(); 

        accountNumber.Account_Type = reader["Account_Type"].ToString(); 
        accountNumber.Branch_Sort_Code = reader["Branch_Sort_Code"].ToString(); 
        accountNumber.Account_Fees = reader["Account_Fees"].ToString(); 
        accountNumber.Account_Balance = reader["Account_Balance"].ToString(); 
        accountNumber.Over_Draft_Limit = reader["Over_Draft_Limit"].ToString(); 
       } 
       return accountNumber; 
      } 
     } 

다음은 콘솔 창 코드입니다.

public static void Balance() 
     { 
      MyService.HalifaxCurrentAccountServiceClient currentAccount = new MyService.HalifaxCurrentAccountServiceClient("NetTcpBinding_IHalifaxCurrentAccountService"); 
      MyService.AccountBalanceRequest cs = new MyService.AccountBalanceRequest(); 


      string AccountNumber; 


      Console.WriteLine("\nEnter your Account Number--------:"); 
      AccountNumber = Console.ReadLine(); 
      cs.Account_Number = AccountNumber; 
      // MyService.AccountBalanceRequest cs1 = currentAccount.AccountBalanceCheek(AccountNumber); 



      if (currentAccount.AccountBalanceCheek(cs))**//Error on this line** 
      { 

        Console.WriteLine("Your Account Number is :" + cs.Account_Number); 
        Console.WriteLine("Your Account Type :" + cs.Account_Balance); 
        Console.WriteLine("Your Account Account Fee :" + cs.Account_Fee); 
        Console.WriteLine("Your Account Balance:" + cs.Account_Balance); 
        Console.WriteLine("Your Account Over Draft Limit :" + cs.Over_Draft_Limit); 

        Console.Write("--------------------------"); 
        Console.ReadLine(); 
        //Console.Clear(); 


      } 

     } 

다음은 애플리케이션을 실행할 때 나타나는 스크린 샷입니다. 코드에서

click here to see the error

+0

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

에서있어서의 서명을 변경. 호출하는 메서드는'bool'을 반환하지 않지만'bool'을 반환하는 것처럼 검사하고 있습니다. – CodingYoshi

답변

3

당신은 검사에게이

이것은 AccountBalanceCheek() 기능은 그러나 함수의 서명이 그것이 AccountBalanceRequest 타입이 아닌 부울을 반환 제안, 부울을 반환한다고 가정
if (currentAccount.AccountBalanceCheek(cs)) 

.

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

당신은 여기에 몇 가지 옵션이 어느 기능을 사용하면 처리 할 수있는 또 하나 개의 또 다른 방법이 있습니다

if(currentAccount.AccountBalanceCheek(cs) == someExpectedType) 
+0

someExpectedType을 어떻게 입력해야합니까 ?? – David

+0

그게 당신이 테스트하고자하는 것에 종속 될 것입니다 ... 지금 AccountBalanceRequest 타입의 객체를 반환하므로 null인지 아닌지를 테스트 할 수 있습니다. 그래서! = null을 할 수 있습니다. 그 클래스 내에서 특정 값을 지정하면됩니다. –

+0

콘솔 코드에서 볼 수 있듯이 계정 번호 – David

0

즉 비교를하는 경우 부울 값을 returna 논리합을 조정 AccountBalanceCheek을 조정합니다.

콘솔에서 계정 번호를 읽는 중이고 독자 개체가 해당 번호/계정 ID를 가진 계정을 의미하는 레코드를 하나 이상 발견 할 수 있으면 계정 번호가 존재하지 않습니다.

bool IsExist=false; 

    while (reader.Read()) 
    { 
    //into the loop means at least one record found so 
    IsExist=true; 
    accountNumber.Account_Number = reader["Account_Number"].ToString(); 
    } 
return IsExist; 

의이 매우 중요한 문제이다

public bool AccountBalanceCheek(AccountBalanceRequest accountNumber)