ASP.NET ExecuteScalar

The ExecuteScalar() method in ADO.NET is specifically designed to retrieve a single value from a database. It is commonly used when you expect a result set to contain a single row with a single column.

ExecuteScalar() method

When you invoke the ExecuteScalar() method, it executes the provided SQL statement or stored procedure against the database and retrieves the value from the first column of the first row in the result set. If the result set is empty, the method returns a null reference.

This method is particularly useful when working with aggregate functions such as Count(*) or Sum(). Instead of retrieving an entire result set, which might be unnecessary if you only need a single value, you can use ExecuteScalar() to retrieve that specific value efficiently.

VB.Net
Dim result As Int32 = Convert.ToInt32(cmd.ExecuteScalar)
C#
int result = Convert.ToInt32(cmd.ExecuteScalar());

One advantage of using ExecuteScalar() over ExecuteReader() is that ExecuteScalar() consumes fewer system resources. Since it only retrieves a single value instead of an entire result set, it can be more efficient in terms of memory and processing.

It's important to note that ExecuteScalar() is not suitable for situations where you expect multiple rows or multiple columns in the result set. In such cases, ExecuteReader() or other methods that return a result set should be used.

The following ASP.NET program find number of rows in the author table using ExecuteScalar method.

Default.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> </div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </form> </body> </html>
Full Source | C#
using System; using System.Data ; using System.Data.SqlClient ; using System.Configuration; public partial class _Default : System.Web.UI.Page { protected void Button1_Click(object sender, EventArgs e) { string connectionString = ConfigurationManager.ConnectionStrings["SQLDbConnection"].ToString(); SqlConnection connection = new SqlConnection(connectionString); string sql = "select count(*) from authors"; try { connection.Open(); SqlCommand cmd = new SqlCommand(sql, connection); int result = Convert.ToInt32(cmd.ExecuteScalar()); connection.Close(); Label1.Text = "Number of rows in author table - " + result; } catch (Exception ex) { Label1.Text = "Error in ExecuteScalar " + ex.ToString(); } } }
Full Source | VB.NET
Imports System.Data Imports System.Data.SqlClient Imports System.Configuration Partial Class _Default Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim connectionString As String Dim connection As SqlConnection connectionString = ConfigurationManager.ConnectionStrings("SQLDbConnection").ToString connection = New SqlConnection(connectionString) Dim sql As String = "select count(*) from authors" Try connection.Open() Dim cmd As New SqlCommand(sql, connection) Dim result As Int32 = Convert.ToInt32(cmd.ExecuteScalar) connection.Close() Label1.Text = "Number of rows in author table - " & result Catch ex As Exception Label1.Text = "Error in ExecuteScalar " & ex.ToString End Try End Sub End Class

Conclusion

The ExecuteScalar() method in ADO.NET is designed to retrieve a single value from a database. It executes SQL statements or stored procedures and retrieves the value from the first column of the first row in the result set. It is particularly useful when working with aggregate functions and offers efficiency benefits by consuming fewer system resources compared to methods that return a result set.