函数返回类型

时间:2012-08-30 11:27:47

标签: c# vb.net

我有一个简单的函数,它根据像这样的内联SQL语句(简化版)从数据库返回单个列的数据:

Function GetId(ByVal name As String) As Object

    Dim sql As String = "Select Id From table where username = '" & name & "'"

    Using cmd As New SqlCommand
        cmd.Connection = conn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = sql
        GetId = cmd.ExecuteScalar
    End Using

End Function

如果SQL返回一行,它可以是NULL或整数,或者SQL不返回任何内容。

在我的代码的另一部分:

Dim userId As Object = New Object

userId = GetBillingGroupToInvoice(name)

在这里使用Object作为返回类型是否可以。如果不是我应该指定什么作为此函数的返回类型?这是在VB中,但C#中的答案也没问题。

由于

4 个答案:

答案 0 :(得分:2)

你的函数应该返回nullable integer,当你的SQL服务器什么也不返回时返回NothingDBNull(如果你不想在没有行之间产生差异)返回 DBNull )。

Function GetId(ByVal name As String) As Integer?

    Dim sql As String = "Select Id From table where username = '" & name & "'"

    Using cmd As New SqlCommand
        cmd.Connection = conn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = sql
        Dim result = cmd.ExecuteScalar
        Return If(DBNull.Value.Equals(result), 
                  Nothing, 
                  DirectCast(result, Integer?))
    End Using

End Function

然后,您可以这样调用您的方法:

Dim userId = GetBillingGroupToInvoice(name)
If userId.HasValue Then
    'Do something with userId.Value'
End If

答案 1 :(得分:1)

如果SQL查询返回整数或空值,您可能希望函数返回可为空的int({C#中的int?而不是对象),以提高类型的安全性。

答案 2 :(得分:1)

将执行返回类型(如果不是DBNull)从ExecuteScalar转换为整数。您可以返回nullable int类型(C#中的int?)。

答案 3 :(得分:1)

您应该指定Integer返回类型而不是Object

Function GetId(ByVal name As String) As Integer
    Dim sql As String = "Select Id From table where username=@name"
    Dim retValue as Integer = -1
    Using cmd As New SqlCommand
        cmd.Connection = conn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = sql
        cmd.Parameters.Add("@name",SqlDbType.VarChar,30).Value=name
        Dim result = cmd.ExecuteScalar()
        if Not IsNothing(result) And Not IsDBNull(result) Then
            retValue=CType(result,Integer)
        End If
    End Using
    return retValue
End Function