コマンドの実行Executing a Command

.NET Framework に含まれている各 .NET Framework データ プロバイダーは、それぞれ DbCommand を継承する固有のコマンド オブジェクトを持ちます。Each .NET Framework data provider included with the .NET Framework has its own command object that inherits from DbCommand. .NET Framework Data Provider for OLE DB には OleDbCommand オブジェクト、.NET Framework Data Provider for SQL Server には SqlCommand オブジェクト、.NET Framework Data Provider for ODBC には OdbcCommand オブジェクト、.NET Framework Data Provider for Oracle には OracleCommand があります。The .NET Framework Data Provider for OLE DB includes an OleDbCommand object, the .NET Framework Data Provider for SQL Server includes a SqlCommand object, the .NET Framework Data Provider for ODBC includes an OdbcCommand object, and the .NET Framework Data Provider for Oracle includes an OracleCommand object. 次の表に示したように、各オブジェクトはコマンドを実行するための各種のメソッドを公開しており、コマンドの種類と適切な戻り値に基づいて使い分けることになります。Each of these objects exposes methods for executing commands based on the type of command and desired return value, as described in the following table.

コマンドCommand 戻り値Return Value
ExecuteReader DataReader オブジェクトを返します。Returns a DataReader object.
ExecuteScalar 単一のスカラー値を返します。Returns a single scalar value.
ExecuteNonQuery 行を一切返さないコマンドを実行します。Executes a command that does not return any rows.
ExecuteXMLReader XmlReader を返します。Returns an XmlReader. SqlCommand オブジェクトでのみ使用できます。Available for a SqlCommand object only.

厳密に型指定された各コマンド オブジェクトは、次の表に示す CommandType 列挙値をサポートしています。これらの列挙値を使用してコマンド文字列の解釈方法を指定できます。Each strongly typed command object also supports a CommandType enumeration that specifies how a command string is interpreted, as described in the following table.

CommandTypeCommandType 説明Description
Text データ ソース側で実行されるステートメントを定義する SQL コマンド。An SQL command defining the statements to be executed at the data source.
StoredProcedure ストアド プロシージャの名前。The name of the stored procedure. 呼び出す Parameters メソッドに関係なく、コマンドの Execute プロパティを使用して入力パラメーターと出力パラメーターにアクセスし、戻り値を取得できます。You can use the Parameters property of a command to access input and output parameters and return values, regardless of which Execute method is called. ExecuteReader を使用した場合は、DataReader を閉じるまで戻り値および出力パラメーターにアクセスすることはできません。When using ExecuteReader, return values and output parameters will not be accessible until the DataReader is closed.
TableDirect テーブルの名前。The name of a table.

Example

SqlCommand オブジェクトを作成し、そのプロパティを設定することによってストアド プロシージャを実行するコード サンプルを次に示します。The following code example demonstrates how to create a SqlCommand object to execute a stored procedure by setting its properties. ストアド プロシージャへの入力パラメーターは、SqlParameter オブジェクトを使って指定します。A SqlParameter object is used to specify the input parameter to the stored procedure. このコマンドを ExecuteReader メソッドで実行し、SqlDataReader からの出力をコンソール ウィンドウに表示します。The command is executed using the ExecuteReader method, and the output from the SqlDataReader is displayed in the console window.

static void GetSalesByCategory(string connectionString,
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = new SqlParameter();
        parameter.ParameterName = "@CategoryName";
        parameter.SqlDbType = SqlDbType.NVarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = categoryName;

        // Add the parameter to the Parameters collection. 
        command.Parameters.Add(parameter);

        // Open the connection and execute the reader.
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
                }
            }
            else
            {
                Console.WriteLine("No rows found.");
            }
            reader.Close();
        }
    }
}
Shared Sub GetSalesByCategory(ByVal connectionString As String, _
    ByVal categoryName As String)

    Using connection As New SqlConnection(connectionString)

        ' Create the command and set its properties.
        Dim command As SqlCommand = New SqlCommand()
        command.Connection = connection
        command.CommandText = "SalesByCategory"
        command.CommandType = CommandType.StoredProcedure

        ' Add the input parameter and set its properties.
        Dim parameter As New SqlParameter()
        parameter.ParameterName = "@CategoryName"
        parameter.SqlDbType = SqlDbType.NVarChar
        parameter.Direction = ParameterDirection.Input
        parameter.Value = categoryName

        ' Add the parameter to the Parameters collection.
        command.Parameters.Add(parameter)

        ' Open the connection and execute the reader.
        connection.Open()
        Using reader As SqlDataReader = command.ExecuteReader()

            If reader.HasRows Then
                Do While reader.Read()
                    Console.WriteLine("{0}: {1:C}", _
                      reader(0), reader(1))
                Loop
            Else
                Console.WriteLine("No rows returned.")
            End If
        End Using
    End Using
End Sub

コマンドのトラブルシューティングTroubleshooting Commands

.NET Framework Data Provider for SQL Server には、失敗したコマンド実行に関連して断続的に発生する問題を検出できるパフォーマンス カウンターが追加されています。The .NET Framework Data Provider for SQL Server adds performance counters to enable you to detect intermittent problems related to failed command executions. 詳細については、次を参照してください。パフォーマンス カウンターします。For more information see Performance Counters.

関連項目See also