SqlCommand.ExecuteScalar Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Executa a consulta e devolve a primeira coluna da primeira linha do conjunto de resultados devolvida pela consulta. Colunas ou linhas adicionais são ignoradas.
public:
virtual System::Object ^ ExecuteScalar();
public:
override System::Object ^ ExecuteScalar();
public object ExecuteScalar();
public override object ExecuteScalar();
abstract member ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
Public Function ExecuteScalar () As Object
Public Overrides Function ExecuteScalar () As Object
Devoluções
A primeira coluna da primeira linha do conjunto de resultados, ou uma referência nula (Nothing em Visual Basic) se o conjunto de resultados estiver vazio. Devolve um máximo de 2033 caracteres.
Implementações
Exceções
Um SqlDbType diferente de Binary ou VarBinary era usado quando Value estava definido para Stream. Para mais informações sobre streaming, consulte SqlClient Streaming Support.
-ou-
Um SqlDbType diferente de Char, NChar, NVarChar, VarChar ou XML era usado quando Value estava definido para TextReader.
-ou-
Um SqlDbType outro que não XML era usado quando Value estava definido para XmlReader.
Ocorreu uma exceção ao executar o comando contra uma linha bloqueada. Esta exceção não é gerada quando está a usar Microsoft .NET Framework versão 1.0.
-ou-
Ocorreu um tempo durante uma operação de streaming. Para mais informações sobre streaming, consulte SqlClient Streaming Support.
Fecharam SqlConnection ou caíram durante uma operação de streaming. Para mais informações sobre streaming, consulte SqlClient Streaming Support.
Ocorreu um erro num Stream, XmlReader ou TextReader objeto durante uma operação de streaming. Para mais informações sobre streaming, consulte SqlClient Streaming Support.
O Stream, XmlReader ou TextReader objeto era fechado durante uma operação de streaming. Para mais informações sobre streaming, consulte SqlClient Streaming Support.
Exemplos
O exemplo seguinte cria um SqlCommand e depois executa-o usando ExecuteScalar. O exemplo recebe uma string que representa um novo valor a ser inserido numa tabela e uma string para usar para se ligar à fonte de dados. A função devolve o novo valor da coluna Identidade se uma nova linha foi inserida, 0 em caso de falha.
static public int AddProductCategory(string newName, string connString)
{
Int32 newProdID = 0;
string sql =
"INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
+ "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = newName;
try
{
conn.Open();
newProdID = (Int32)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return (int)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
Observações
Use o ExecuteScalar método para recuperar um único valor (por exemplo, um valor agregado) de uma base de dados. Isto requer menos código do que usar o ExecuteReader método, e depois realizar as operações necessárias para gerar o valor único usando os dados devolvidos por um SqlDataReader.
Uma consulta típica ExecuteScalar pode ser formatada como no seguinte exemplo em C#:
cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();