SqlCommand.ExecuteScalar メソッド

定義

クエリを実行し、クエリによって返される結果セットの最初の行の最初の列を返します。 追加の列または行は無視されます。

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

返品

結果セットの最初の行の最初の列。結果セットが空の場合は null 参照 (Visual Basicでは Nothing)。 最大 2033 文字を返します。

実装

例外

SqlDbTypeに設定されたときに、Binary または Value 以外のStreamが使用されました。 ストリーミングの詳細については、「 SqlClient ストリーミング のサポート」を参照してください。

-または-

SqlDbTypeに設定されたときに、CharNCharNVarCharVarCharValueTextReaderが使用されました。

-または-

SqlDbType 以外のは、ValueXmlReader に設定されたときに使用されました。

ロックされた行に対するコマンドの実行中に例外が発生しました。 Microsoft .NET Framework バージョン 1.0 を使用している場合、この例外は生成されません。

-または-

ストリーミング操作中にタイムアウトが発生しました。 ストリーミングの詳細については、「 SqlClient ストリーミング のサポート」を参照してください。

SqlConnectionストリーミング操作中に閉じたり削除されたりします。 ストリーミングの詳細については、「 SqlClient ストリーミング のサポート」を参照してください。

ストリーミング操作中に、 StreamXmlReader 、または TextReader オブジェクトでエラーが発生しました。 ストリーミングの詳細については、「 SqlClient ストリーミング のサポート」を参照してください。

ストリーミング操作中に、 StreamXmlReader 、または TextReader オブジェクトが閉じられました。 ストリーミングの詳細については、「 SqlClient ストリーミング のサポート」を参照してください。

次の例では、 SqlCommand を作成し、 ExecuteScalarを使用して実行します。 この例には、テーブルに挿入する新しい値を表す文字列と、データ ソースへの接続に使用する文字列が渡されます。 この関数は、新しい行が挿入された場合は新しい ID 列の値を返します。失敗した場合は 0 です。

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 メソッドを使用して、データベースから単一の値 (集計値など) を取得します。 これには、 ExecuteReader メソッドを使用して、 SqlDataReaderによって返されるデータを使用して単一の値を生成する必要がある操作を実行するよりも少ないコードが必要です。

一般的な ExecuteScalar クエリは、次の C# の例のように書式設定できます。

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

適用対象

こちらもご覧ください