我需要根据参数中的员工编号检测“Timed_In”字段是-1还是0。到目前为止,我只得到了这段代码。
也许我应该创建一个布尔函数并返回,如果它在该特定行中检测到“True”但我不知道该怎么做。
我非常感谢能够在VB.net编程中再迈出一步!
Public Shared Function CheckTimeIn(ByVal empid As String)
Dim dtoffenseinfo As New DataTable
If Not DBConnection.State = ConnectionState.Open Then
'open connection
DBConnection.Open()
Else
End If
Dim adapter As New OleDbDataAdapter("SELECT Timed_In from EmployeeRegistration where EMployeeID='" & empid & "'", DBConnection)
adapter.Fill(dtoffenseinfo)
DBConnection.Close()
Return dtoffenseinfo
End Function
答案 0 :(得分:2)
我有这个功能,我依赖于讨厌的“布尔”值,不同的数据源没有正确存储:
''' <summary>
''' Converts any string to a boolean value. Any non-boolean or unexpected value will
''' convert to False.
'''
''' True values (case insensitive):
''' -1
''' 1
''' yes
''' t
''' true
''' y
''' </summary>
Public Function ToBoolean(value As String) As Boolean
Select Case value.ToUpper().Trim()
Case "-1", "1", "YES", "T", "TRUE", "Y"
Return True
Case Else
Return False
End Select
End Function
编辑: 作为旁注,您需要仔细检查您的查询是否未返回DBNull,因为这将导致.NET中的字符串出现转换错误。在调用ToBoolean:
之前,需要调用这样的例程 Public Function DBValueToString(value As Object, Optional defaultValue As String = "") As String
If value Is Nothing Then
Return defaultValue
ElseIf IsDBNull(value) Then
Return defaultValue
Else
Return Convert.ToString(value)
End If
End Function
编辑2: 此外,当您看起来只想要单个记录的值时,您的例程将返回整个数据表。您可以使用OleDbCommand并在其上调用ExecuteScalar,而不是使用适配器并填充表。这将返回一个值,但您的查询必须永远不会返回多个列或行(在这方面,您的查询似乎没有问题。)
另一种选择是使用现有代码调用ToBoolean(DBValueToString(dtoffenseinfo.Rows(0)(“Timed_In”)))。当然,在进行此调用之前,您需要检查是否已返回行。