繁体   English   中英

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

[英]Can I set a parameter to accept either an int or a decimal?

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

我有一个“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

我认为使用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)(...)

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

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM