2017-08-16 7 views
0

コンソールアプリケーションでWCFサービスを実行しようとしています。 wcfサービスはコンソールアプリケーションで挿入、更新、削除操作を行っていますが、コンソールアプリケーションでwcfサービスを使用してデータベースからデータを取得できません。私は必要なデータメンバーを持っているローカルクラスを持っているし、私はアカウント番号と呼ばれるパラメータを期待wcfサービス内のメソッドを定義しました。コンソールアプリケーションのユーザでアカウント番号を入力し、このアカウントに基づいてコンソールはsqlデータベースからすべてのデータを取得するはずですが、コンソールアプリケーションを実行するときに入力したアカウント番号のみを取得します。誰かが私を助けてくれたら、私は感謝します。ここでコンソールアプリケーションを使用したWCFサービス

はここでローカルクラスのコード..

 [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のCODEです..です

 public bool AccountBalanceCheek(AccountBalanceRequest accountNumber) 
    { 
     using (SqlConnection conn = new SqlConnection(ConnectionString)) 
     { 
      conn.Open(); 
      using (SqlCommand cmd = new SqlCommand("SELECT * FROM 
      Current_Account_Details WHERE Account_Number ='" + 
       accountNumber.Account_Number + "'", conn)) 
      { 
       cmd.Parameters.AddWithValue("@Account_Number", 
       accountNumber.Account_Number); 
       cmd.CommandType = CommandType.Text; 
       cmd.ExecuteNonQuery(); 
       return true; 

      } 

     } 
    } 

ここでコンソールアプリケーションのコードは、..です

ここ
 public static void Balance() 
    { 
     MyService.HalifaxCurrentAccountServiceClient currentAccount = new MyService.HalifaxCurrentAccountServiceClient("NetTcpBinding_IHalifaxCurrentAccou 
      ntService"); 

     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(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(); 

} 

アプリケーションを実行するときの出力のスクリーンショットです。

Click here to see the out put

答えて

2

それはExecuteNonQueryを使用していたので、あなたの方法AccountBalanceCheekは、あなたのDBからデータを取得していないとそれだけで何ができるかbool

を返します:

あなたのコンソールアプリケーションのコードをあなたに
//change return type from bool to AccountBalanceRequest  
    public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber) 
     { 
      using (SqlConnection conn = new SqlConnection(ConnectionString)) 
      { 
       conn.Open(); 
       //use top 1 since you are only getting one record. 
       //let us use string interpolation, if you are working below C#6 
       //replace it with your previous value 
       var cmd = new SqlCommand([email protected]"SELECT TOP 1 
               * 
              FROM 
               Current_Account_Details 
              WHERE 
               Account_Number ='{accountNumber.Account_Number}'", conn)); 
       cmd.CommandType = CommandType.Text; 
       //use ExecuteReader to execute sql select 
       //ExecuteNonQuery is for update, delete, and insert. 
       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 
        //assuming that your datatype are string... just do the conversion... 
        accountNumber.Account_Balance = reader["Account_Balance"].ToString(); 
        accountNumber.Account_Fee = reader["Account_Fee"].ToString(); 
        accountNumber.Account_Balance = reader["Account_Balance"].ToString(); 
        accountNumber.Over_Draft_Limit = reader["Over_Draft_Limit"].ToString(); 
       } 
       return accountNumber; 
      } 
     } 

値を出力するにはcs1を使用する必要があります。

//previously returns bool, now it returns AccountBalanceRequest 
MyService.AccountBalanceRequest cs1 =currentAccount.AccountBalanceCheek(cs); 
//use cs1 
Console.WriteLine("Your Account Number is :" +cs1.Account_Number); 
Console.WriteLine("Your Account Type :" + cs1.Account_Balance); 
Console.WriteLine("Your Account Account Fee :" + cs1.Account_Fee); 
Console.WriteLine("Your Account Balance:" + cs1.Account_Balance); 
Console.WriteLine("Your Account Over Draft Limit :" + cs1.Over_Draft_Limit); 
+0

@Jeric – Rasel

+0

は、このコードをあなたの 'AccountBalanceCheek'メソッドで上書きします。 –

+0

AccountBalanceCheek内でこのコードを置き換えると次のエラーが表示されます暗黙のうちに型オブジェクトを文字列に変換することはできません....この4行でaccountNumber.Account_Balance = reader ["Account_Balance"]; accountNumber.Account_Fee =リーダー["Account_Fee"]; accountNumber.Account_Balance =リーダー["Account_Balance"]; accountNumber.Over_Draft_Limit =リーダー["Over_Draft_Limit"]; – Rasel

関連する問題