次の方法で共有


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

コマンド オブジェクトを使用してデータベースに対してコマンドを実行するときには、実行する 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 メソッドの戻り値として取得できます。詳細については、「Specifying Parameters and Return Values」を参照してください。

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 ステートメントを作成および実行する

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

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

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

概念

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

Using Parameters with a DataAdapter

Specifying Parameters and Return Values