SqlCommand.ExecuteScalar メソッド

定義

クエリを実行し、そのクエリが返す結果セットの最初の行にある最初の列を返します。Executes the query, and returns the first column of the first row in the result set returned by the query. 以降の列または行は無視されます。Additional columns or rows are ignored.

public:
 virtual System::Object ^ ExecuteScalar();
public object ExecuteScalar ();
abstract member ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
Public Function ExecuteScalar () As Object

戻り値

結果セットの最初の行の最初の列。結果セットが空の場合は、null 参照 (Visual Basic の Nothing)。The first column of the first row in the result set, or a null reference (Nothing in Visual Basic) if the result set is empty. 最大 2,033 文字を返します。Returns a maximum of 2033 characters.

実装

例外

SqlDbTypeに設定されたときに、 BinaryでもVarBinaryValue でもない Stream が使用されました。A SqlDbType other than Binary or VarBinary was used when Value was set to Stream. ストリーミングの詳細については、「SqlClient ストリーミング サポート」を参照してください。For more information about streaming, see SqlClient Streaming Support.

または-or-

SqlDbTypeに設定されたときに、 Char NChar NVarChar VarChar XmlValue のいずれでもない TextReader が使用されました。A SqlDbType other than Char, NChar, NVarChar, VarChar, or Xml was used when Value was set to TextReader.

または-or-

SqlDbTypeに設定されたときに、 XmlValue 以外の XmlReader が使用されました。A SqlDbType other than Xml was used when Value was set to XmlReader.

ロックされた行に対するコマンドの実行中に、例外が発生しました。An exception occurred while executing the command against a locked row. Microsoft .NET Framework バージョン 1.0 を使用している場合は、この例外は生成されません。This exception is not generated when you are using Microsoft .NET Framework version 1.0.

または-or-

ストリーミング操作中にタイムアウトが発生しました。A timeout occurred during a streaming operation. ストリーミングの詳細については、「SqlClient ストリーミング サポート」を参照してください。For more information about streaming, see SqlClient Streaming Support.

ストリーミング操作中に、SqlConnection が閉じられたか切断されました。The SqlConnection closed or dropped during a streaming operation. ストリーミングの詳細については、「SqlClient ストリーミング サポート」を参照してください。For more information about streaming, see SqlClient Streaming Support.

ストリーミング操作中に、StreamXmlReader、または TextReader オブジェクトでエラーが発生しました。An error occurred in a Stream, XmlReader or TextReader object during a streaming operation. ストリーミングの詳細については、「SqlClient ストリーミング サポート」を参照してください。For more information about streaming, see SqlClient Streaming Support.

ストリーミング操作中に、StreamXmlReader、または TextReader オブジェクトが閉じられました。The Stream, XmlReader or TextReader object was closed during a streaming operation. ストリーミングの詳細については、「SqlClient ストリーミング サポート」を参照してください。For more information about streaming, see SqlClient Streaming Support.

次の例では、SqlCommand を作成し、ExecuteScalarを使用して実行します。The following example creates a SqlCommand and then executes it using ExecuteScalar. この例には、テーブルに挿入される新しい値を表す文字列と、データソースへの接続に使用する文字列が渡されます。The example is passed a string representing a new value to be inserted into a table, and a string to use to connect to the data source. 関数は、新しい行が挿入された場合は新しいid列の値を返し、失敗した場合は0を返します。The function returns the new Identity column value if a new row was inserted, 0 on failure.

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

注釈

ExecuteScalar メソッドを使用して、データベースから1つの値 (集計値など) を取得します。Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. これには、ExecuteReader メソッドを使用するよりも少ないコードが必要であり、SqlDataReaderによって返されるデータを使用して1つの値を生成するために必要な操作を実行します。This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader.

一般的な ExecuteScalar クエリは、次C#の例のように書式設定できます。A typical ExecuteScalar query can be formatted as in the following C# example:

cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";  
Int32 count = (Int32) cmd.ExecuteScalar();  

適用対象

こちらもご覧ください