パラメーターおよびパラメーターのデータ型の構成Configuring parameters and parameter data types

コマンド オブジェクトは、パラメーターを使用して SQL ステートメントまたはストアド プロシージャに値を渡すことによって、型チェックと検証の機能を実現します。Command objects use parameters to pass values to SQL statements or stored procedures, providing type checking and validation. コマンド テキストとは異なり、パラメーターの入力は実行可能なコードとしてではなく、リテラル値として扱われます。Unlike command text, parameter input is treated as a literal value, not as executable code. これにより、攻撃者がサーバーのセキュリティを侵害するコマンドを SQL ステートメントに "注入" する SQL インジェクション攻撃を防ぐことができます。This helps guard against "SQL injection" attacks, in which an attacker inserts a command that compromises security on the server into an SQL statement.

パラメーター化コマンドによりクエリ実行パフォーマンスも向上します。これは、データベース サーバーが入力コマンドを適切なキャッシュ済みクエリ プランに正確に一致させるのに役立つためです。Parameterized commands can also improve query execution performance, because they help the database server accurately match the incoming command with a proper cached query plan. 詳細については、次を参照してください。実行プランのキャッシュと再利用パラメーターと実行プランの再利用します。For more information, see Execution Plan Caching and Reuse and Parameters and Execution Plan Reuse. セキュリティおよびパフォーマンス上の利点に加え、パラメーター化コマンドを使用すると、データ ソースに渡す値を簡単に扱うことができます。In addition to the security and performance benefits, parameterized commands provide a convenient method for organizing values passed to a data source.

DbParameter オブジェクトは、コンストラクターを使って作成できるほか、 DbParameterCollection コレクションの Add メソッドを呼び出し、 DbParameterCollection にオブジェクトを追加することによって作成することもできます。A DbParameter object can be created by using its constructor, or by adding it to the DbParameterCollection by calling the Add method of the DbParameterCollection collection. Add メソッドは、コンストラクター引数または既存のパラメーター オブジェクトを入力として受け取ります。この点はデータ プロバイダーによっても異なります。The Add method will take as input either constructor arguments or an existing parameter object, depending on the data provider.

ParameterDirection プロパティの指定Supplying the ParameterDirection property

パラメーターを追加する際は、入力パラメーターとは別に、パラメーターの ParameterDirection プロパティを指定する必要があります。When adding parameters, you must supply a ParameterDirection property for parameters other than input parameters. ParameterDirection で使用できる ParameterDirection の値を次の表に示します。The following table shows the ParameterDirection values that you can use with the ParameterDirection enumeration.

メンバー名Member name 説明Description
Input このパラメーターは入力パラメーターです。The parameter is an input parameter. 既定値です。This is the default.
InputOutput このパラメーターは入力と出力の両方の機能を持っています。The parameter can perform both input and output.
Output このパラメーターは出力パラメーターです。The parameter is an output parameter.
ReturnValue パラメーターは、ストアド プロシージャ、組み込み関数、ユーザー定義関数などの操作からの戻り値を表します。The parameter represents a return value from an operation such as a stored procedure, built-in function, or user-defined function.

パラメーターのプレース ホルダーの操作Working with parameter placeholders

パラメーターのプレースホルダーの構文はデータ ソースに依存します。The syntax for parameter placeholders depends on the data source. .NET Framework のデータ プロバイダーによって、パラメーターおよびパラメーターのプレースホルダーの名前付けや指定方法が異なります。The .NET Framework data providers handle naming and specifying parameters and parameter placeholders differently. 次の表に示すように、データ ソースごとに固有の構文が採用されています。This syntax is customized to a specific data source, as described in the following table.

データ プロバイダーData provider パラメーターの名前付け構文Parameter naming syntax
System.Data.SqlClient @parametername形式の名前付きパラメーターが使用されます。Uses named parameters in the format @parametername.
System.Data.OleDb 疑問符 (?) で指定される位置パラメーター マーカーが使用されます。Uses positional parameter markers indicated by a question mark (?).
System.Data.Odbc 疑問符 (?) で指定される位置パラメーター マーカーが使用されます。Uses positional parameter markers indicated by a question mark (?).
System.Data.OracleClient :parmname (または parmname) 形式の名前付きパラメーターが使用されます。Uses named parameters in the format :parmname (or parmname).

パラメーターのデータ型を指定します。Specifying parameter data types

パラメーターのデータ型は、.NET Framework データ プロバイダーに固有です。The data type of a parameter is specific to the .NET Framework data provider. 値を変換する種類を指定する、Parameterデータ ソースに値を渡す前に .NET Framework データ プロバイダーの種類にします。Specifying the type converts the value of the Parameter to the .NET Framework data provider type before passing the value to the data source. Parameter オブジェクトの DbType プロパティを特定の Parameter に設定する一般的な方法で DbTypeの型を指定することもできます。You may also specify the type of a Parameter in a generic manner by setting the DbType property of the Parameter object to a particular DbType.

.NET Framework データ プロバイダーの種類、Parameterオブジェクトは、.NET Framework の型から推論されます、ValueParameterオブジェクト、または、DbTypeParameterオブジェクト。The .NET Framework data provider type of a Parameter object is inferred from the .NET Framework type of the Value of the Parameter object, or from the DbType of the Parameter object. Parameter 値として渡されるオブジェクトまたは指定された Parameter に基づいて推論される DbType型を、次の表に示します。The following table shows the inferred Parameter type based on the object passed as the Parameter value or the specified DbType.

.NET Framework 型.NET Framework type DbTypeDbType SqlDbTypeSqlDbType OleDbTypeOleDbType OdbcTypeOdbcType OracleTypeOracleType
Boolean BooleanBoolean ビットBit ブール型Boolean ビットBit ByteByte
Byte ByteByte TinyIntTinyInt UnsignedTinyIntUnsignedTinyInt TinyIntTinyInt ByteByte
byte[]byte[] 2 項Binary VarBinary です。VarBinary. これは 8,000 バイトです。 バイト配列が VarBinary の最大サイズより大きい場合、この暗黙の変換は失敗します。8000 バイトを超えるバイト配列を明示的に設定、SqlDbTypeします。This implicit conversion will fail if the byte array is larger than the maximum size of a VarBinary, which is 8000 bytes.For byte arrays larger than 8000 bytes, explicitly set the SqlDbType. VarBinaryVarBinary 2 項Binary RawRaw
Char char から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from char is not supported. CharChar CharChar ByteByte
DateTime DateTimeDateTime DateTimeDateTime DBTimeStampDBTimeStamp DateTimeDateTime DateTimeDateTime
DateTimeOffset DateTimeOffsetDateTimeOffset SQL Server 2008 の DateTimeOffset。DateTimeOffset in SQL Server 2008. SQL Server 2008 より前のバージョンの SQL Server では、DateTimeOffset から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from DateTimeOffset is not supported in versions of SQL Server earlier than SQL Server 2008. DateTimeDateTime
Decimal Decimal (10 進数型)Decimal Decimal (10 進数型)Decimal Decimal (10 進数型)Decimal 数字Numeric NumberNumber
Double Double (倍精度浮動小数点型)Double FloatFloat Double (倍精度浮動小数点型)Double 倍精度浮動小数点型Double Double (倍精度浮動小数点型)Double
Single SingleSingle RealReal SingleSingle RealReal FloatFloat
Guid GuidGuid UniqueIdentifierUniqueIdentifier GuidGuid UniqueIdentifierUniqueIdentifier RawRaw
Int16 Int16Int16 SmallIntSmallInt SmallIntSmallInt SmallIntSmallInt Int16Int16
Int32 Int32Int32 IntInt IntInt IntInt Int32Int32
Int64 Int64Int64 BigIntBigInt BigIntBigInt BigIntBigInt NumberNumber
Object ObjectObject バリアントVariant バリアントVariant Object から OdbcType への推論はサポートされていません。Inferring an OdbcType from Object is not supported. BlobBlob
String StringString NVarChar。NVarChar. 文字列が NVarChar の最大サイズ (4000 文字) より大きい場合、この暗黙の変換はエラーになります。This implicit conversion will fail if the string is larger than the maximum size of an NVarChar, which is 4000 characters. 4000 文字を超える文字列の場合は、明示的に SqlDbTypeを設定してください。For strings larger than 4000 characters, explicitly set the SqlDbType. VarWCharVarWChar NVarCharNVarChar NVarCharNVarChar
TimeSpan 時刻Time SQL Server 2008 の Time。Time in SQL Server 2008. SQL Server 2008 より前のバージョンの SQL Server では、TimeSpan から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from TimeSpan is not supported in versions of SQL Server earlier than SQL Server 2008. DBTimeDBTime 時刻Time DateTimeDateTime
UInt16 UInt16UInt16 UInt16 から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from UInt16 is not supported. UnsignedSmallIntUnsignedSmallInt IntInt UInt16UInt16
UInt32 UInt32UInt32 UInt32 から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from UInt32 is not supported. UnsignedIntUnsignedInt BigIntBigInt UInt32UInt32
UInt64 UInt64UInt64 UInt64 から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from UInt64 is not supported. UnsignedBigIntUnsignedBigInt 数字Numeric NumberNumber
AnsiStringAnsiString VarCharVarChar VarCharVarChar VarCharVarChar VarCharVarChar
AnsiStringFixedLengthAnsiStringFixedLength CharChar CharChar CharChar CharChar
通貨Currency 通貨Money 通貨Currency OdbcType から Currency への推論はサポートされていません。Inferring an OdbcType from Currency is not supported. NumberNumber
日付Date SQL Server 2008 の Date。Date in SQL Server 2008. SQL Server 2008 より前のバージョンの SQL Server では、Date から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from Date is not supported in versions of SQL Server earlier than SQL Server 2008. DBDateDBDate 日付Date DateTimeDateTime
SByteSByte SByte から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from SByte is not supported. TinyIntTinyInt SByte から OdbcType への推論はサポートされていません。Inferring an OdbcType from SByte is not supported. SByteSByte
StringFixedLengthStringFixedLength NCharNChar WCharWChar NCharNChar NCharNChar
時刻Time SQL Server 2008 の Time。Time in SQL Server 2008. SQL Server 2008 より前のバージョンの SQL Server では、Time から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from Time is not supported in versions of SQL Server earlier than SQL Server 2008. DBTimeDBTime 時刻Time DateTimeDateTime
VarNumericVarNumeric VarNumeric から SqlDbType への推論はサポートされていません。Inferring a SqlDbType from VarNumeric is not supported. VarNumericVarNumeric VarNumeric から OdbcType への推論はサポートされていません。Inferring an OdbcType from VarNumeric is not supported. NumberNumber
ユーザー定義型 ( SqlUserDefinedAggregateAttributeを持つオブジェクト)user-defined type (an object with SqlUserDefinedAggregateAttribute プロバイダーに応じて Object または String (SqlClient は常に Object を返し、Odbc は常に String を返します。OleDb マネージド データ プロバイダーはいずれかを表示できます)。Object or String, depending the provider (SqlClient always returns an Object, Odbc always returns a String, and the OleDb managed data provider can see either SqlUserDefinedTypeAttribute がある場合は SqlDbType.Udt、それ以外の場合は Variant。SqlDbType.Udt if SqlUserDefinedTypeAttribute is present, otherwise Variant OleDbType.VarWChar (値が null の場合)、それ以外の場合は OleDbType.Variant。OleDbType.VarWChar (if value is null) otherwise OleDbType.Variant. OdbcType.NVarCharOdbcType.NVarChar サポート外not supported

注意

decimal から他の型への変換は縮小変換になるため、decimal 値は最も近い整数値に切り捨てられます。Conversions from decimal to other types are narrowing conversions that round the decimal value to the nearest integer value toward zero. 変換結果が対象の型にならなかった場合、 OverflowException がスローされます。If the result of the conversion is not representable in the destination type, an OverflowException is thrown.

注意

指定する必要があります、サーバーに null パラメーター値を送信するときにDBNullではなく、 null (Nothing Visual Basic で)。When you send a null parameter value to the server, you must specify DBNull, not null (Nothing in Visual Basic). システムの null 値は、値のない空オブジェクトです。The null value in the system is an empty object that has no value. DBNull は、null 値を表すために使用します。DBNull is used to represent null values. データベースの NULL 値の詳細については、「 Handling Null Values」を参照してください。For more information about database nulls, see Handling Null Values.

パラメーター情報の派生Deriving parameter information

DbCommandBuilder クラスを使用してストアド プロシージャからパラメーターを派生させることができます。Parameters can also be derived from a stored procedure using the DbCommandBuilder class. SqlCommandBuilder クラスと OleDbCommandBuilder クラスはどちらも静的メソッド DeriveParametersを提供します。このメソッドは、ストアド プロシージャから得られたパラメーター情報を使用して、コマンド オブジェクトのパラメーター コレクションを設定します。Both the SqlCommandBuilder and OleDbCommandBuilder classes provide a static method, DeriveParameters, which automatically populates the parameters collection of a command object that uses parameter information from a stored procedure. DeriveParameters はコマンドの既存のパラメーター情報を上書きします。Note that DeriveParameters overwrites any existing parameter information for the command.

注意

パラメーター情報を派生させた場合、情報を取得するためにデータ ソースへのラウンド トリップが 1 つ増えるため、パフォーマンスが低下します。Deriving parameter information incurs a performance penalty because it requires an additional round trip to the data source to retrieve the information. パラメーター情報がデザイン時にわかっている場合は、パラメーターを明示的に設定することでアプリケーションのパフォーマンスを改善できます。If parameter information is known at design time, you can improve the performance of your application by setting the parameters explicitly.

詳細については、次を参照してください。 Commandbuilder でのコマンドの生成します。For more information, see Generating Commands with CommandBuilders.

SqlCommand およびストアド プロシージャでパラメーターの使用Using parameters with a SqlCommand and a stored procedure

ストアド プロシージャは、データドリブンのアプリケーションに多くの利点を提供します。Stored procedures offer many advantages in data-driven applications. ストアド プロシージャを使用すると、データベースの操作を単一のコマンドにカプセル化し、最大のパフォーマンスが得られるように最適化し、さらに追加のセキュリティ機能を使用して、セキュリティを強化することができます。By using stored procedures, database operations can be encapsulated in a single command, optimized for best performance, and enhanced with additional security. ストアド プロシージャは、ストアド プロシージャ名の後にパラメーター引数として、SQL ステートメントを使用して渡すことによって呼び出すことができますが、Parametersコレクション、ADO.NET のDbCommandオブジェクトでは、ストアド プロシージャをより明示的に定義できます。パラメーターと戻り値を出力パラメーターにアクセスするとします。Although a stored procedure can be called by passing the stored procedure name followed by parameter arguments as an SQL statement, by using the Parameters collection of the ADO.NET DbCommand object enables you to more explicitly define stored procedure parameters, and to access output parameters and return values.

注意

パラメーター化ステートメントは、 sp_executesql, を使ってサーバー上で実行されるため、クエリ プランの再利用が可能になります。Parameterized statements are executed on the server by using sp_executesql, which allows for query plan reuse. sp_executesql バッチ内のローカル カーソルまたはローカル変数は、 sp_executesqlを呼び出すバッチでは認識されません。Local cursors or variables in the sp_executesql batch are not visible to the batch that calls sp_executesql. データベース コンテキストの変更は、 sp_executesql ステートメント終了時まで有効です。Changes in database context last only to the end of the sp_executesql statement. 詳細については、次を参照してください。 sp_executesql (TRANSACT-SQL)します。For more information, see sp_executesql (Transact-SQL).

SqlCommand でパラメーターを使用して SQL Server のストアド プロシージャを実行する場合は、 Parameters コレクションに追加したパラメーターの名前が、ストアド プロシージャ内のパラメーター マーカーの名前と一致している必要があります。When using parameters with a SqlCommand to execute a SQL Server stored procedure, the names of the parameters added to the Parameters collection must match the names of the parameter markers in the stored procedure. .NET Framework Data Provider for SQL Server は、SQL ステートメントまたはストアド プロシージャにパラメーターを渡す場合の疑問符 (?) プレース ホルダーをサポートしていません。The .NET Framework Data Provider for SQL Server does not support the question mark (?) placeholder for passing parameters to an SQL statement or a stored procedure. ストアド プロシージャ内のパラメーターは名前付きのパラメーターと見なされ、一致するパラメーター マーカーが検索されます。It treats parameters in the stored procedure as named parameters and searches for matching parameter markers. たとえば、 CustOrderHist ストアド プロシージャが、 @CustomerIDという名前のパラメーターで定義されているとします。For example, the CustOrderHist stored procedure is defined by using a parameter named @CustomerID. このストアド プロシージャを実行する場合、実行元のコードでも @CustomerIDという名前のパラメーターを使用する必要があります。When your code executes the stored procedure, it must also use a parameter named @CustomerID.

CREATE PROCEDURE dbo.CustOrderHist @CustomerID varchar(5)

Example

次の例では、 Northwind サンプル データベースにある SQL Server ストアド プロシージャを呼び出す方法を説明します。This example demonstrates how to call a SQL Server stored procedure in the Northwind sample database. ストアド プロシージャの名前は dbo.SalesByCategory で、 @CategoryName データ型の nvarchar(15)という名前の入力パラメーターを持ちます。The name of the stored procedure is dbo.SalesByCategory and it has an input parameter named @CategoryName with a data type of nvarchar(15). このコードでは、プロシージャの終了時に接続が破棄されるように、using ブロック内で新しい SqlConnection を作成しています。The code creates a new SqlConnection inside a using block so that the connection is disposed when the procedure ends. SqlCommand オブジェクトおよび SqlParameter オブジェクトが作成され、それぞれのプロパティが設定されます。The SqlCommand and SqlParameter objects are created, and their properties set. SqlDataReader によって SqlCommand が実行された後、ストアド プロシージャから結果セットが返されて、出力がコンソール ウィンドウに表示されます。A SqlDataReader executes the SqlCommand and returns the result set from the stored procedure, displaying the output in the console window.

注意

SqlCommand オブジェクトと SqlParameter オブジェクトを作成してから別個のステートメントでプロパティを設定する代わりに、オーバーロード コンストラクターを使用して複数のプロパティを 1 つのステートメントで設定することもできます。Instead of creating SqlCommand and SqlParameter objects and then setting properties in separate statements, you can instead elect to use one of the overloaded constructors to set multiple properties in a single statement.

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

OleDbCommand または OdbcCommand でパラメーターの使用Using parameters with an OleDbCommand or OdbcCommand

OleDbCommand または OdbcCommandでパラメーターを使用するときは、 Parameters コレクションにパラメーターが追加されている順序が、ストアド プロシージャ内でパラメーターが定義されている順序と一致している必要があります。When using parameters with an OleDbCommand or OdbcCommand, the order of the parameters added to the Parameters collection must match the order of the parameters defined in your stored procedure. .NET Framework Data Provider for OLE DB と .NET Framework Data Provider for ODBC は、ストアド プロシージャのパラメーターをプレース ホルダーとして処理し、順序でパラメーター値を適用します。The .NET Framework Data Provider for OLE DB and .NET Framework Data Provider for ODBC treat parameters in a stored procedure as placeholders and apply parameter values in order. また、戻り値パラメーターは、 Parameters コレクションに最初に追加されたパラメーターにする必要があります。In addition, return value parameters must be the first parameters added to the Parameters collection.

.NET Framework Data Provider for OLE DB と .NET Framework Data Provider for ODBC は、SQL ステートメントまたはストアド プロシージャにパラメーターを渡す場合の名前付きパラメーターの情報をサポートしません。The .NET Framework Data Provider for OLE DB and .NET Framework Data Provider for ODBC do not support named parameters for passing parameters to an SQL statement or a stored procedure. この場合は、次の例に示すように、疑問符 (?) プレースホルダーを使用する必要があります。In this case, you must use the question mark (?) placeholder, as in the following example.

SELECT * FROM Customers WHERE CustomerID = ?

したがって、 Parameter コレクションに Parameters オブジェクトを追加する順序は、パラメーターの疑問符 (?)As a result, the order in which Parameter objects are added to the Parameters collection must directly correspond to the position of the ? プレースホルダーの位置と完全に対応している必要があります。placeholder for the parameter.

OleDb の例OleDb Example

Dim command As OleDbCommand = New OleDbCommand( _
  "SampleProc", connection)
command.CommandType = CommandType.StoredProcedure

Dim parameter As OleDbParameter = command.Parameters.Add( _
  "RETURN_VALUE", OleDbType.Integer)
parameter.Direction = ParameterDirection.ReturnValue

parameter = command.Parameters.Add( _
  "@InputParm", OleDbType.VarChar, 12)
parameter.Value = "Sample Value"

parameter = command.Parameters.Add( _
  "@OutputParm", OleDbType.VarChar, 28)
parameter.Direction = ParameterDirection.Output
OleDbCommand command = new OleDbCommand("SampleProc", connection);
command.CommandType = CommandType.StoredProcedure;

OleDbParameter parameter = command.Parameters.Add(
  "RETURN_VALUE", OleDbType.Integer);
parameter.Direction = ParameterDirection.ReturnValue;

parameter = command.Parameters.Add(
  "@InputParm", OleDbType.VarChar, 12);
parameter.Value = "Sample Value";

parameter = command.Parameters.Add(
  "@OutputParm", OleDbType.VarChar, 28);
parameter.Direction = ParameterDirection.Output;

Odbc の例Odbc Example

Dim command As OdbcCommand = New OdbcCommand( _
  "{ ? = CALL SampleProc(?, ?) }", connection)
command.CommandType = CommandType.StoredProcedure

Dim parameter As OdbcParameter = command.Parameters.Add("RETURN_VALUE", OdbcType.Int)
parameter.Direction = ParameterDirection.ReturnValue

parameter = command.Parameters.Add( _
  "@InputParm", OdbcType.VarChar, 12)
parameter.Value = "Sample Value"

parameter = command.Parameters.Add( _
  "@OutputParm", OdbcType.VarChar, 28)
parameter.Direction = ParameterDirection.Output
OdbcCommand command = new OdbcCommand( _
  "{ ? = CALL SampleProc(?, ?) }", connection);
command.CommandType = CommandType.StoredProcedure;

OdbcParameter parameter = command.Parameters.Add( _
  "RETURN_VALUE", OdbcType.Int);
parameter.Direction = ParameterDirection.ReturnValue;

parameter = command.Parameters.Add( _
  "@InputParm", OdbcType.VarChar, 12);
parameter.Value = "Sample Value";

parameter = command.Parameters.Add( _
  "@OutputParm", OdbcType.VarChar, 28);
parameter.Direction = ParameterDirection.Output;

関連項目See also