2012-03-20 8 views
0

私はtimespan関数を使用して日数を計算していますが、この値はテキストボックスに追加され、データベースに保存されます。asp.net timespan

私は最近、半日としてラジオボタンを追加しました。チェックされていれば、1日ではなく0.5日の休日が追加されます。これは、保存する前にテキストボックスに表示されたときに正しく動作するようです。ただし、データベースを実際に保存して更新すると、テキストボックスに示すように、0.5ではなく1の値が表示されます。

このフィールドのデータベースのフィールドタイプは元々 'int'に設定されていましたが、半日を追加すると保存されませんでした。小数点以下を保存しようとしていたため、このフィールドタイプを 'decimal'これがより適切かもしれないと思ったからです。これが正しいのか、何か違うはずですか?

私はそれがテキストボックスに指定した値を保存していない理由を把握するように見えることができない...任意の提案

Private Sub btnHNoDays_Click(sender As Object, e As System.EventArgs) Handles btnHNoDays.Click 

    'declare dates 
    Dim dtStart As Date = txtHStart_Date.Text 
    Dim dtEnd As Date = txtHEnd_Date.Text 

    'timespan function used to minus one date to another and produce a value 
    Dim ts As TimeSpan = (dtEnd - dtStart) 

    If RadioButton1.Checked Then 

     ts = (dtEnd - dtStart) - TimeSpan.FromDays(0.5) 
    Else 
     ts = (dtEnd - dtStart) 
    End If 

    ' the value is set to to textbox. 
    txtNoofDays.Text = ts.TotalDays() 

    ' the today days value 
    Console.WriteLine(ts.TotalDays) 
End Sub 



Protected Sub btnHRequestSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnHRequestSave.Click 
    'collect data 
    Dim Sdate = txtHStart_Date.Text 
    Dim Edate = txtHEnd_Date.Text 
    Dim NoofDays = txtNoofDays.Text 
    Dim notes = TxtHRequestNotes.Text 
    Dim username = lblHolidayRequestLIU.Text 

    'define connection 

    Dim HRequestConnection As New SqlConnection 
    HRequestConnection.ConnectionString = HolidayRequestSqlDataSource.ConnectionString 

    'create command 
    Dim HRequestInsert As New SqlCommand("Insert into HolidayRequests (username, RequestDateStart, RequestDateEnd, RequestTotalDays, RequestNotes) VALUES (@username, @Sdate, @Edate, @NoofDays, @notes)", HRequestConnection) 

    'define parameters 
    HRequestInsert.Parameters.Add("username", SqlDbType.NVarChar, 20).Value = lblHolidayRequestLIU.Text 
    HRequestInsert.Parameters.Add("Sdate", SqlDbType.Date).Value = txtHStart_Date.Text 
    HRequestInsert.Parameters.Add("Edate", SqlDbType.Date).Value = txtHEnd_Date.Text 
    HRequestInsert.Parameters.Add("NoofDays", SqlDbType.Decimal).Value = txtNoofDays.Text 
    HRequestInsert.Parameters.Add("notes", SqlDbType.NVarChar).Value = TxtHRequestNotes.Text 

    ' execute commands 
    HRequestConnection.Open() 
    HRequestInsert.ExecuteNonQuery() 

    lblHolRequestResponse.Text = "Your holidays request has been saved! 
End Sub 

答えて

0

はどのようにして、データベース内のdecimal列を指定していますか?精度とスケール(see here)を与えましたか?そうでない場合は、小数点以下の数字を返さないデフォルト値はdecimal(18,0)です。

要件に応じて、decimal(5,1)の行に沿ってタイプを指定する必要があります。

ベア精度は総桁数であることを念頭に置いては、とスケール左右小数点のに)小数点の右の数です。したがって、decimal(5,1)は9999.9まで格納できます。

(私はSQL Serverを使用していると仮定しています)

+0

Thanks..thisは、しかし、今ちょうど例2のためにした値は2.0です。これらは単に1つの数値として表示することはできません:)働いて、小数点を必要とする値のみが表示されるか、すべてまたは何も表示されません。 – user1055487

+0

これは2.0としてSQLに格納されます。元の値をデータベースに書き出している間は、好きな方法でTextBoxのユーザーに提示することができます。 –