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 参数需要为第三个。如果您更改cmd.Parameter.Add()调用的顺序,那么您的原始示例应该可以工作。

于 2010-08-26T14:36:05.443 回答