2017-12-30 34 views
0

コンソールアプリケーションでwcfサービスを使用しています。私はアカウント番号に基づいてアカウント情報を取得したい。アカウント番号を入力すると、エラーなしでメソッドにアクセスできますが、コンソールアプリケーションでエラーが発生しました。コンソールアプリケーションで値 ''を型として解析できませんブール

: 'メッセージのデシリアライズ中にフォーマッタが例外をスローしました。パラメータhttp://tempuri.org/:AccountBalanceCheekResultを逆シリアル化しようとしたときにエラーが発生しました。 InnerExceptionメッセージが 'System.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(); 


      } 

     } 

ここでは、アプリケーションを実行するときのスクリーンショットを示します。あなたはこれがAccountBalanceCheek()関数は、しかし、関数のシグネチャは、それがAccountBalanceRequestタイプではなくブール値を返すことを示唆している、ブール値を返すことを前提としてテスト

if (currentAccount.AccountBalanceCheek(cs)) 

を持っているあなたのコードで

click here to see the error

+0

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

からメソッドの署名を変更します。呼び出すメソッドは 'bool'を返しませんが、' bool'を返すかのようにチェックしています。 – CodingYoshi

答えて

3

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

あなたはここにいくつかのオプションがあり、どちらかのブール値をreturna OR関数は

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

someExpectedTypeには何を入力すればよいですか? – David

+0

これは、あなたがテストしたいものに依存するでしょう...今、AccountBalanceRequest型のオブジェクトを返すので、nullかどうかをテストして、 '!= null'を行うことができます。そのクラス内の特定の値を返します。 –

+0

コンソールコードでわかるように、アカウント番号 – David

0

すなわち比較を持っている場合は、あなたが扱うことができる1つの以上の追加の方法があり調整するAccountBalanceCheekを調整します。

コンソールからアカウント番号を読み取っているため、リーダーオブジェクトがその番号/ IDのアカウントを意味するレコードが1つ以上見つかった場合、アカウント番号は存在しません。

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) 
関連する問題