2017-12-30 12 views
0

Ich habe den WCF-Dienst in der Konsolenanwendung konsumiert. Ich möchte Kontoinformationen basierend auf Kontonummer abrufen. Wenn ich die Kontonummer eingeben, ist es in der Lage, ohne Fehler zu verfahren, aber ich habe folgende Fehler in der Konsolenanwendung.Der Wert '' kann nicht als Typ 'Boolean' in der Konsolenanwendung

: 'Der Formatierer hat beim Versuch, die Nachricht zu deserialisieren, eine Ausnahme ausgelöst: Beim Versuch, den Parameter http://tempuri.org/:AccountBalanceCheekResult zu deserialisieren, ist ein Fehler aufgetreten. Die InnerException-Nachricht lautete 'Es ist ein Fehler beim Deserialisieren des Objekts vom Typ System.Boolean aufgetreten. Der Wert '' kann nicht als Typ 'Boolean' geparst werden. '. Weitere Informationen finden Sie unter InnerException. '

Hier ist die Klasse.

Hier ist die Implementierung und ich habe keinen Fehler in ADO.NET Code gefunden.

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

Hier ist der Konsolenfenstercode.

Hier ist der Screenshot, wenn ich die Anwendung ausführen.

click here to see the error

+0

Dies ist eine sehr grundlegende Frage ist. Die Methode, die Sie aufrufen, gibt 'bool' nicht zurück, aber Sie überprüfen, ob es einen' bool' zurückgibt. – CodingYoshi

Antwort

3

In Ihrem Code haben Sie den Test

if (currentAccount.AccountBalanceCheek(cs)) 

Dies setzt voraus, dass die AccountBalanceCheek() Funktion einen Bool zurückgibt, aber die Signatur der Funktion legt nahe, dass es eine AccountBalanceRequest Typ zurückgibt und keine boolean .

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

Sie haben ein paar Optionen hier, entweder anpassen AccountBalanceCheek boolean Wert returna ODER die einstellen, wenn die Funktion einen Vergleich d.h

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

Was soll ich irgendeinenExpectedType eingeben? – David

+0

Das hängt davon ab, was Sie testen möchten ... im Moment geben Sie das Objekt vom Typ AccountBalanceRequest zurück, so dass Sie testen können, ob es null ist oder nicht, also könnten Sie '! = Null 'machen oder wenn Sie ein spezifischer Wert innerhalb dieser Klasse dann das tun. –

+0

Wie Sie im Konsolencode sehen können, möchte ich die Kontodetails basierend auf der Kontonummer – David

0

es eine weitere zusätzliche Möglichkeit ist, müssen Sie behandeln können.

Da Sie die Kontonummer von der Konsole lesen und wenn das Reader-Objekt in der Lage ist, mindestens einen Datensatz herauszufinden, bedeutet Konto mit solcher Nummer/ID existiert sonst Kontonummer existiert nicht.

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; 

auch die Unterschrift der von Methode ändern

public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 

zu

public bool AccountBalanceCheek(AccountBalanceRequest accountNumber) 
Verwandte Themen