Partilhar via


Obtendo um único valor de um banco de dados

Talvez seja necessário retornar informações de banco de dados que são simplesmente um único valor, em vez de na forma de uma tabela ou fluxo de dados. Por exemplo, talvez você queira retornar o resultado de uma função agregada, como COUNT(*), SUM(Price) ou AVG(Quantity). O Command objeto oferece a capacidade de devolver valores únicos usando o ExecuteScalar método. O ExecuteScalar método devolve, como valor escalar, o valor da primeira coluna da primeira linha do conjunto de resultados.

O exemplo de código a seguir insere um novo valor no banco de dados usando um SqlCommand. O ExecuteScalar método é usado para retornar o valor da coluna de identidade para o registro inserido.

public static int AddProductCategory(string newName, string connString)
{
    var newProdID = 0;
    const string sql =
        "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new(connString))
    {
        SqlCommand cmd = new(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (int)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return newProdID;
}
Public Function AddProductCategory( _
  ByVal newName As String, ByVal connString As String) As Integer
    Dim newProdID As Int32 = 0
    Dim sql As String = _
     "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " _
       & "SELECT CAST(scope_identity() AS int);"

    Using conn As New SqlConnection(connString)
        Dim cmd As New SqlCommand(sql, conn)
        cmd.Parameters.Add("@Name", SqlDbType.VarChar)
        cmd.Parameters("@Name").Value = newName
        Try
            conn.Open()
            newProdID = Convert.ToInt32(cmd.ExecuteScalar())
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Using

    Return newProdID
End Function

Ver também