Module Module1
Sub Main()
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("MyDate", GetType(Date)))
dt.Columns.Add(New DataColumn("MyTime", GetType(String)))
Dim expr As String = _
"SUBSTRING(CONVERT(MyDate, 'System.String'),1,LEN(CONVERT(MyDate, 'System.String'))-11) + ' ' + ISNULL(MyTime,'')"
dt.Columns.Add(New DataColumn("MyDateTime", GetType(Date), expr))
For i As Integer = 1 To 10
Dim dr As DataRow = dt.NewRow
If i < 5 Then
dr(0) = DateAdd(DateInterval.Day, i, Now)
dr(1) = i.ToString + ":00 PM"
Else
dr(0) = DateAdd(DateInterval.Day, 0, Now)
dr(1) = i.ToString + ":00 AM"
End If
dt.Rows.Add(dr)
Next
Dim dv As New DataView(dt)
dv.Sort = "MyDateTime"
Console.WriteLine(ViewToString(dv))
Console.ReadLine()
End Sub
Public Function ViewToString(ByVal view As DataView) As String
Dim sb As New Text.StringBuilder
For i As Integer = 0 To view.Count - 1
Dim row As DataRow = view(i).Row
sb.Append("Row ")
sb.Append(i.ToString)
sb.Append(": ")
sb.Append(RowToString(row))
Next
Return sb.ToString
End Function
Public Function RowToString(ByVal row As DataRow) As String
Dim sb As New Text.StringBuilder
sb.Append(vbCrLf)
For Each dc As DataColumn In row.Table.Columns
If Not row.RowState = DataRowState.Deleted Then
sb.Append(StrDup(10, " "))
sb.Append(LSet(dc.ColumnName, 20))
sb.Append(" : ")
If row(dc) Is System.DBNull.Value Then
sb.Append("<null>")
Else
sb.Append(row(dc).ToString)
End If
sb.Append(vbCrLf)
End If
Next
Return sb.ToString
End Function
End Module
Tuesday, February 08, 2005
ADO.NET Calculated DateTime Expression
In our business we store user entered time values as strings separate from the date. If you're doing the same thing, here's an example of how you can create a calculated column in a DataTable that merges the date and time so you can use it in your business functions a lot easier. This will work the same regardless of whether you're storing the time value as military time or AM/PM and handles null values.
Subscribe to:
Post Comments (Atom)


4 comments:
This is again a typical example on the weakness of DotNet in reallife scenarios. It is surely a great language, a superior methology and all, but it stil has not all the bells and wistles of a mature language like VFP.
Nobody in the VFP world would save a Time as a Char (that's why there is a vartype of DateTime) and to see that convulted code just to parse and reconstruct the values, I just think: Thankfully I'm using VFP!
Woody,
The fact that we are storing time values separate from the date has nothing to do with the language. We store them that way in our VFP products as well.
-B
Hi Ryan, Of course you can. If the Time portion of a date is "optional", it's stil a DateTime with that part set to 00:00:00. Where's the problem?
Yes the time portion is set to 12:00:00 AM in the database so how do you know if the user really entered 12am or if they mean that no time is specified?
Post a Comment