クライアントインターフェイスガイド > ADO.NET経由でのTDVサーバーへの接続 > ADO.NETドライバーをテストするためのサンプルコード > ストアドプロシージャの例の呼び出し
 
ストアドプロシージャの例の呼び出し
すべての定義が整った後、ExecuteNonQueryを呼び出すとストアドプロシージャが呼び出されます。このサンプルコードを実行する前に、LookupProductプロシージャ(TDVディレクトリパス〜/shared/examples/LookupProduct内)を公開する必要があります。それ以外の場合、ExecuteNonQueryの戻り値は無効です。
プロシージャSQLステートメントは、JDBCとODBCで同じです。
サンプルはCompositeCommandオブジェクトを取得し、次の行を使用してCommandTypeをStoredProcedureとして定義します。
cmd.CommandType = CommandType.StoredProcedure;
 
この指定なしでCompositeCommandオブジェクトが呼び出された場合、例外が発生する可能性があります。
新しいIDパラメータがCompositeParameterオブジェクトタイプで追加されます。
CompositeParameter id = new CompositeParameter("?ProductID", 12, CompositeDbType.INTEGER);
CompositeParameter IDパラメータオブジェクトは、名前、値、およびタイプを取得します。
"?ProductID", 12, and CompositeDbType.INTEGER.
 
プロシージャパラメータには、指定された方向が必要です。 ADO.NET標準には、次の4つのパラメーター方向があります。
入力
出力
InputOutput
ReturnValue
この例では、ProductIDは入力パラメーターであるため、サンプルコードは次のように定義します。
id.Direction = ParameterDirection.Input;
 
この例には、次の行で宣言された出力パラメーターもあります。
CompositeParameter cursor = new CompositeParameter("?cursor", CompositeDbType.OTHER);
 
名前は、CompositeDbType.OTHERタイプの?cursorプレースホルダーに設定されます。パラメータがカーソルの場合、データタイプとしてCompositeDbType.OTHERを指定する必要があります。方向を設定する必要があります:
cursor.Direction = ParameterDirection.Output;
 
サンプルコードは、これらのパラメータオブジェクトを次の行で追加します。
cmd.Parameters.Add(id);
cmd.Parameters.Add(cursor);
 
有効な出力値を読み取るために、サンプルは以下を使用します。
CompositeDataReader reader = (CompositeDataReader)cursor.Value;
 
カーソル出力は、CompositeDataReaderによってフェッチされる必要があります。すべてのカーソルデータはCompositeDbType.OTHERデータタイプにマップされるため、戻り値はCompositeDataReaderオブジェクトです。 CompositeDataReaderオブジェクトは、cursor.Valueから取得できます。
次のサンプルコードは、プロシージャを呼び出す1つの方法を示しています。
public void TestSelect()
{
CompositeConnection conn = GetConnection();
 
String sql = "{call LookupProduct(?ProductID,?cursor)}";
CompositeCommand cmd = new CompositeCommand(sql, conn);
cmd.CommandType = CommandType.StoredProcedure;
CompositeParameter id = new CompositeParameter("?ProductID", 12, CompositeDbType.INTEGER);
id.Direction = ParameterDirection.Input;
CompositeParameter cursor = new CompositeParameter("?cursor", CompositeDbType.OTHER);
cursor.Direction = ParameterDirection.Output;
cmd.Parameters.Add(id);
cmd.Parameters.Add(cursor);
try
{
cmd.ExecuteNonQuery();
CompositeDataReader reader = (CompositeDataReader)cursor.Value;
if (reader != null)
{
String ProductName;
int ProductID;
String ProductDescription;
if (reader.Read())
{
//ProductName=reader.GetString("ProductName");
ProductName = (String)reader["ProductName"];
//ProductID=reader.GetInt32("ProductID");
ProductID = (int)reader["ProductID"];
//ProductDescription=reader.GetString("ProductDescription");
ProductDescription = (String)reader["ProductDescription"];
}
}
}
catch (Exception ex)
{
throw ex;
}
}
 
次のサンプルコードは、SQL文字列SQLを使用してメソッドを定義します。このメソッドを使用して、intValueにバインドされたプレースホルダーパラメーター?intを使用してストアドプロシージャp_integerを呼び出すことができます。
CompositeParameterの定義は次のとおりです。
CompositeParameter intValue = new CompositeParameter("?int", CompositeDbType.INTEGER);
 
?intは、CompositeDbType.INTEGERタイプのInputOutputパラメーターです。
次のようなコード行を使用して、プロシージャパラメータ値を設定します。
intValue.Value = 12
 
次のような行を使用して、プロシージャのパラメータ値を取得します。
int value = (int)intValue.Value
 
次のコードサンプルは、ストアドプロシージャを呼び出す別の方法です。
public void TestInOut()
{
string sql = "{call p_integer(?int)}";
CompositeCommand cmd = new CompositeCommand(sql, conn);
cmd.CommandType = Command60
Type.StoredProcedure;
CompositeParameter intValue = new CompositeParameter("?int", CompositeDbType.INTEGER);
cmd.Parameters.Add(intValue);
intValue.Direction = ParameterDirection.InputOutput;
intValue.Value = 12;
try
{
cmd.ExecuteNonQuery();
int value = (int)intValue.Value;
}
catch (Exception ex)
{
throw ex;
}
}