次の方法で共有


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

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

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

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

注意

データセットを使用する場合は、一般にコマンドを直接実行することはありません。代わりに、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 に設定されたパラメーターを作成します。

    注意

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

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

    注意

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

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 パラメーター

ストアド プロシージャでのデータの変更