代码之家  ›  专栏  ›  技术社区  ›  David

在控制台应用程序中,无法将值“”分析为“Boolean”类型

  •  0
  • David  · 技术社区  · 7 年前

    我正在将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();
    
    
               }
    
            }
    

    这是我运行应用程序时的屏幕截图。

    click here to see the error

    2 回复  |  直到 7 年前
        1
  •  3
  •   John Mitchell    7 年前

    在代码中有测试

     if (currentAccount.AccountBalanceCheek(cs))
    

    这假设 AccountBalanceCheek() 函数返回布尔值,但函数的签名表明它返回 AccountBalanceRequest 类型,而不是布尔值。

    public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber)
    

    你有几个选择,要么调整 AccountBalanceCheek 返回布尔值或调整if函数以进行比较,即

    if(currentAccount.AccountBalanceCheek(cs) == someExpectedType)
    
        2
  •  0
  •   Hameed Syed    7 年前

    还有一种额外的方法可以处理。

    由于您正在从控制台读取帐号,并且如果读卡器对象能够找出至少一条记录,则表示存在具有此类帐号/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 AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber)
    

    public bool AccountBalanceCheek(AccountBalanceRequest accountNumber)