2017-03-22 10 views
-3

私は、各従業員が仕事に来た時と従業員が退社した時を格納するアクセスデータベースを持っています。私は、ユーザーが仕事に費やした時間を家で計算したいと思います。ここに私のコードは次のとおりです。私は各従業員のための時間の仕事を得る必要があります

DataTable dm = new DataTable(); 
    today = DateTime.Today; 
    hooodorDa = new OleDbDataAdapter("select heUsers,heCome,heGo from HoodoorEnseraf where heDate=#" + today.ToString("yyyy/MM/dd") + "# and heUsers='" + heUsers.Text + "' ", connection); 
    hooodorDa.Fill(dm); 
    DateTime hec = Convert.ToDateTime(dm.Rows[0]["heCome"]); 
    DateTime heg = Convert.ToDateTime(dm.Rows[0]["heGo"]); 
    TimeSpan diff = hec - heg; 
    command = new OleDbCommand("update HoodoorEnseraf set heDifference=? where heUsers=? ;", connection); 
    command.Parameters.AddWithValue("?", diff); 
    command.Parameters.AddWithValue("?", heUsers.Text); 

私は下のスクリーンショットに示されているが、私のコードは私にエラーを与えているとして、数フィールドに値を挿入する必要があります。

object cannot cast from dbnull to other types

私のコードが悪いのか?

enter image description here

+2

あなたの問題は何ですか?つまり、あなたがこれまでに試したことをコードに入れていいのですが、投稿したコードに問題があることを説明すると、おそらくあなたの質問にもっと反応が出ます。 – Icepickle

+0

問題は何ですか? diff値は正しいですか? –

+0

このエラーは発生しません。オブジェクトはdbnullから他の型にキャストできません –

答えて

0

あなたがTimeSpan.TotalMinutesプロパティを探しているように見えます。 heDifferenceは数字なので、ユーザーが作業した総時間を取得してそこに保存することができます。 TimeSpan.TotalHoursを使用できますが、分はより正確です。



修正されたコード:

DataTable dm = new DataTable(); 
today = DateTime.Today; 
hooodorDa = new OleDbDataAdapter("select heUsers,heCome,heGo from HoodoorEnseraf where heDate=#" + today.ToString("yyyy/MM/dd") + "# and heUsers='" + heUsers.Text + "' ", connection); 
hooodorDa.Fill(dm); 
DateTime hec = dm.Rows[0].Field<DateTime>("heCome"); 
DateTime heg = dm.Rows[0].Field<DateTime>("heGo"); 
TimeSpan diff = hec - heg; 
command = new OleDbCommand("update HoodoorEnseraf set heDifference=" + 
    diff.TotalMinutes.ToString() + " where heUsers='" + heUsers.Text + "';", connection); 
+0

* "分はより正確です" * - なぜですか? – Sinatr

+0

@Sinatr OPは従業員の働いた時間を知りたいので、 – Nathangrad

+0

両方のプロパティが 'double'ですなぜ' 1.5 '時間が '90.0よりも正確でないのか? '分ですか? – Sinatr

関連する問題