2016-04-19 13 views
0

私は列の合計を文字列として表示しようとしています。どうしましたか? 私はcmd.ExecuteReader()から取得する唯一の出力です。以下のようだ:System.Data.OleDb.OleDbDataReaderASP.NET列の文字列への合計

 protected void TotalHours() { 
     DatabaseConnection.Commandstring = ("SELECT SUM ([Time]) FROM tbl_login"); 
     using (OleDbConnection con = new OleDbConnection(DatabaseConnection.ConString)) { 
      try { 
       con.Open(); 
       using (OleDbCommand cmd = new OleDbCommand(DatabaseConnection.Commandstring, con)) { 
        DatabaseConnection.result = cmd.ExecuteReader(); 
        txt_TotalTime.Text = ("Total Time: " + DatabaseConnection.result.ToString()); 
        con.Close(); 
       } 
      } 

      catch (Exception ex) { 
       con.Close(); 
       Debug.WriteLine("Error Selecting Time from Database " + ex.Message); 
      } 
     } 
    } 

答えて

1

あなたは、通常のリーダを介して複数の返されたレコードを読み取るために使用されExecuteReaderを必要としません。必要なのはExecuteScalarです。

DatabaseConnection.result = (decimal) cmd.ExecuteScalar(); 

必要なタイプにキャストしてください。それはあなたがお金に基づいてcaculationをやっているように見えるので、それは小数でなければなりません。

+0

ありがとうございました!それはうまくいった! 私のDB内のテーブルはINTに設定されていますが、キャストを削除するとうまくいきます:) 将来的にお金が入っていますので、何か便利なことを教えてください:) – BPW

+0

@BPW、 'int'では、テーブルに小数点を格納することはできません。それはあなたの必要条件に依存しますが、一般的にお金のために使用されるデータ型は 'decimal'でなければなりません。 – Habib

0

ypuがreaderを使用する場合は、を読まなければなりません。reader.Read(); (usingにそれを置く)だけでなくリーダーを配置することを忘れないでください:

try { 
    using (OleDbConnection con = new OleDbConnection(DatabaseConnection.ConString)) { 
    con.Open(); 

    using (OleDbCommand cmd = new OleDbCommand(DatabaseConnection.Commandstring, con)) { 
     using (var reader = cmd.ExecuteReader()) { 
     if (reader.Read()) // you have to read 
      txt_TotalTime.Text = String.Format("Total Time: ", reader.GetValue(0)); 
     } 
    } 
    } 
} 
catch (DbException ex) { // Bad style: do not catch ALL the exceptions 
    Debug.WriteLine("Error Selecting Time from Database " + ex.Message); 
}