我可以设置一个参数来接受int或decimal吗?

时间:2014-02-24 16:25:08

标签: vb.net types parameters

是否可以将十进制或整数作为参数接受到相同的值?例如:

我有一个“AddUpdateCondition”子例程来向ODBCCommand添加参数,我需要能够添加不同的数据类型。我可以只重载子程序,或者我可以将参数设置为某个对象,并检查是否传入了整数或小数?

我宁愿选择一种方法而不是这两种方法:

Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As String, Optional ByVal type As String = "AND")

    'If a where clause has not been added, create it. 
    If Not sql.ToString.Contains("WHERE") Then
        sql.Append(" WHERE ")
    Else
        sql.Append(" " & type & " ")
    End If

    'Add the condition
    sql.Append(fieldName & " " & cond & " = ?")

    'Add the parameter for this condition
    cmd.Parameters.AddWithValue(fieldName, value)

End Sub

Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As Decimal, Optional ByVal type As String = "AND")

    'If a where clause has not been added, create it. 
    If Not sql.ToString.Contains("WHERE") Then
        sql.Append(" WHERE ")
    Else
        sql.Append(" " & type & " ")
    End If

    'Add the condition
    sql.Append(fieldName & " " & cond & " = ?")

    'Add the parameter for this condition
    cmd.Parameters.AddWithValue(fieldName, value)

End Sub

2 个答案:

答案 0 :(得分:2)

我认为使用Generic方法会更容易。请注意,value参数的类型指定为As T,并且通过将(Of T)添加到方法签名来使该方法成为通用的。

Protected Sub AddUpdateCondition(Of T)(ByVal fieldName As String, ByVal cond As String, ByVal value As T, Optional ByVal type As String = "AND")
    ' If a where clause has not been added, create it. 
    If Not sql.ToString.Contains("WHERE") Then
        sql.Append(" WHERE ")
    Else
        sql.Append(" " & conjunction & " ")
    End If

    ' Add the condition
    sql.Append(fieldName & " " & cond & " = ?")

    ' Add the parameter for this condition
    cmd.Parameters.AddWithValue(fieldName, value)
End Sub

并将其称为十进制:

AddUpdateCondition(Of Decimal)(...)

或者喜欢这个字符串:

AddUpdateCondition(Of String)(...)

答案 1 :(得分:1)

您可以在方法中添加一个指定类型的可选参数。这是您修改后的代码:

Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As Decimal, ByVal requestedType As Type, Optional ByVal conjunction As String = "AND")
    ' If a where clause has not been added, create it. 
    If Not sql.ToString.Contains("WHERE") Then
        sql.Append(" WHERE ")
    Else
        sql.Append(" " & conjunction & " ")
    End If

    ' Convert the value
    Dim convertedValue = CTypeDynamic(value, requestedType)

    ' Add the condition
    sql.Append(fieldName & " " & cond & " = ?")

    ' Add the parameter for this condition
    cmd.Parameters.AddWithValue(fieldName, convertedValue)
End Sub

按如下方式调用此方法(对于Integer值):

AddUpdateCondition("name", "cond", 10, GetType(Integer))