次の方法で共有


方法 : コマンド オブジェクトのパラメータを設定および取得する

更新 : 2007 年 11 月

コマンド オブジェクトを使用してデータベースに対してコマンドを実行するときには、実行する SQL ステートメントまたはストアド プロシージャにパラメータが必要になる場合があります。たとえば、パラメータを必要とする単純な UPDATE ステートメントは次のようになります。

UPDATE Employees
SET LastName = @LastName, FirstName = @FirstName, BirthDate = @BirthDate
WHERE (EmployeeID = @EmployeeID)

このステートメントを実行する場合は、すべてのパラメータ (@LastName、@FirstName、@BirthDate、および @EmployeeID) に値を設定する必要があります。そのためには、パラメータ オブジェクトを使用します。コマンド オブジェクトは、一連の型のオブジェクト SqlParameterOleDbParameterOdbcParameter、または OracleParameter が含まれたパラメータのコレクション (たとえば、Parameters) をサポートします。コレクション内には、渡す必要のある各パラメータについて 1 つのパラメータ オブジェクトがあります。また、ストアド プロシージャを呼び出す場合は、プロシージャの戻り値を取得するために追加のパラメータが必要な場合もあります。

80x06z3b.alert_note(ja-jp,VS.90).gifメモ :

データセットを使用する場合は、一般にコマンドを直接実行することはありません。代わりに、TableAdapter クエリにパラメータを渡します。詳細については、「方法 : データセットにデータを読み込む」を参照してください。

パラメータ値の設定

コマンドを実行する前に、コマンドのすべてのパラメータに対して値を設定する必要があります。

パラメータ値を設定するには

  • コマンドのパラメータ コレクションの各パラメータに対して、Value プロパティを設定します。

    ストアド プロシージャを参照するコマンドを実行する前にパラメータを設定する方法の例を次に示します。このサンプルでは、au_id、au_lname、au_fname という 3 つのパラメータを含むパラメータ コレクションが既に設定されていると仮定しています。どのパラメータを設定するかを明確にするために、各パラメータは名前で設定されています。

    With oleDbCommand1
        .CommandText = "UpdateAuthor"
        .CommandType = System.Data.CommandType.StoredProcedure
        .Parameters("au_id").Value = "172-32-1176"
        .Parameters("au_lname").Value = "White"
        .Parameters("au_fname").Value = "Johnson"
    End With
    
    OleDbConnection1.Open()
    oleDbCommand1.ExecuteNonQuery()
    OleDbConnection1.Close()
    
    oleDbCommand1.CommandText = "UpdateAuthor";
    oleDbCommand1.CommandType = System.Data.CommandType.StoredProcedure;
    
    oleDbCommand1.Parameters["au_id"].Value = "172-32-1176";
    oleDbCommand1.Parameters["au_lname"].Value = "White";
    oleDbCommand1.Parameters["au_fname"].Value = "Johnson";
    
    oleDbConnection1.Open();
    oleDbCommand1.ExecuteNonQuery();
    oleDbConnection1.Close();
    

戻り値の取得

ストアド プロシージャは、多くの場合呼び出し元のアプリケーションに値を返します。

プロシージャによって返される値を取得するには

  1. Direction プロパティを Output または InputOutput (プロシージャ内で同じパラメータを値の受け渡しの両方に使用する場合) に設定したパラメータを作成します。パラメータのデータ型が予想される戻り値のデータ型と一致するようにします。

  2. プロシージャを実行した後、返されたパラメータの Value プロパティを読み取ります。

プロシージャの戻り値を取得するには

  1. Direction プロパティが ReturnValue に設定されたパラメータを作成します。

    80x06z3b.alert_note(ja-jp,VS.90).gifメモ :

    戻り値のパラメータ オブジェクトは、パラメータ コレクションの最初の項目である必要があります。

  2. パラメータのデータ型が予想される戻り値のデータ型と一致するようにします。

    80x06z3b.alert_note(ja-jp,VS.90).gifメモ :

    UPDATE、INSERT、DELETE の各 SQL ステートメントは、ステートメントによって影響を受けたレコードの数を示す整数値を返します。この値は、ExecuteNonQuery メソッドの戻り値として取得できます。詳細については、「ストアド プロシージャでのデータの変更 (ADO.NET)」を参照してください。

CountAuthors という名前のストアド プロシージャの戻り値を取得する方法の例を次に示します。この例では、コマンドのパラメータ コレクションの最初のパラメータが "retvalue" という名前で、方向が ReturnValue に設定されていると仮定しています。

Dim returnValue As Integer

oleDbCommand1.CommandText = "CountAuthors"
oleDbCommand1.CommandType = CommandType.StoredProcedure

oleDbConnection1.Open()
oleDbCommand1.ExecuteNonQuery()
oleDbConnection1.Close()

returnValue = CType(oleDbCommand1.Parameters("retvalue").Value, Integer)
MessageBox.Show("Return Value = " & returnValue.ToString())
int returnValue;

oleDbCommand1.CommandText = "CountAuthors";
oleDbCommand1.CommandType = CommandType.StoredProcedure;

oleDbConnection1.Open();
oleDbCommand1.ExecuteNonQuery();
oleDbConnection1.Close();

returnValue = (int)(oleDbCommand1.Parameters["retvalue"].Value);
MessageBox.Show("Return Value = " + returnValue.ToString());

参照

処理手順

方法 : 行を返す SQL ステートメントを作成および実行する

方法 : 単一の値を返す SQL ステートメントを作成および実行する

方法 : 値を返さない SQL ステートメントを作成および実行する

方法 : 行を返すストアド プロシージャを実行する

方法 : 単一の値を返すストアド プロシージャを実行する

方法 : 値を返さないストアド プロシージャを実行する

概念

DataAdapter パラメータ (ADO.NET)

ストアド プロシージャでのデータの変更 (ADO.NET)

その他の技術情報

アプリケーションへのデータのフェッチ