SqlCommand.ExecuteScalar SqlCommand.ExecuteScalar SqlCommand.ExecuteScalar SqlCommand.ExecuteScalar Method

定義

クエリを実行し、そのクエリが返す結果セットの最初の行にある最初の列を返します。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:
 override System::Object ^ ExecuteScalar();
public override object ExecuteScalar ();
override this.ExecuteScalar : unit -> obj
Public Overrides 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.

実装

例外

ValueStream に設定されたときに、Binary でも VarBinary でもない SqlDbType が使用されました。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-

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

- または --or-

ValueXmlReader に設定されたときに、Xml 以外の SqlDbType が使用されました。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. 関数は、新しい返しますIdentity列の値を新しい行が挿入された場合、失敗した場合は 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メソッド、および操作によって返されるデータを使用して 1 つの値を生成する必要のある、SqlDataReaderします。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();  

適用対象

こちらもご覧ください