1

proc 名を procedureNamePattern に渡そうとしましたが、プロシージャはすべてのプロシージャのすべてのメタデータを返すようです。空の文字列を渡すと、同じ結果が得られます。

使用したコードは次のとおりです。

using (AdsCommand command = new AdsCommand { CommandText = "sp_getProcedureColumns", 
                                             Connection = connection, 
                                             CommandType = CommandType.StoredProcedure })
{
   AdsParameter param = new AdsParameter("@procedureNamePattern", DbType.String) { 
     Direction = ParameterDirection.Input, Value = originalProcedureName };
   command.Parameters.Add(param);

   AdsParameter param0 = new AdsParameter("@catalog", DbType.String) { 
       Direction = ParameterDirection.Input, Value = null };
   command.Parameters.Add(param0);

   AdsParameter param1 = new AdsParameter("@schemaPattern", DbType.String) { 
       Direction = ParameterDirection.Input, Value = null };
   command.Parameters.Add(param1);

   AdsParameter param2 = new AdsParameter("@columnNamePattern", DbType.String) { 
       Direction = ParameterDirection.Input, Value = null };
   command.Parameters.Add(param2);
4

1 に答える 1

0

ストアド プロシージャでは、メソッドを使用できますDeriveParameters。それはそれをより簡単にするかもしれません。次に例を示します。

AdsCommand cmd = conn.CreateCommand();    
cmd.CommandText = "sp_getProcedureColumns";
cmd.CommandType = CommandType.StoredProcedure;
cmd.DeriveParameters();
cmd.Parameters["ProcedureNamePattern"].Value = "MyProcName";
AdsDataReader rdr = cmd.ExecuteReader();

DeriveParameters メソッドを呼び出さない場合、生成される基になる SQL ステートメントは、指定された順序で指定されたパラメーターから直接生成されます。つまり、プロシージャ定義と一致する順序でパラメーターを指定する必要があります。この場合、ProcedureNamePattern パラメーターは 3 番目である必要があります。cmd.Parameter.Add()呼び出しの順序を変更すると、元の例が機能するはずです。

于 2010-08-26T14:36:05.443 に答える