Procedure 의 Parameter 를 읽어와서 자동으로 바인딩 시켜주는 것.


using System;
using System.Data;
using System.Collections;
using System.Data.OracleClient;
using LGCNS.DAC;

namespace MQM
{
 public class OracleUtil
 {
  public OracleUtil()
  {
  }

  /// <summary>
  /// OracleParameterCollection 와 HashTable 의 값을 매칭시켜준다
  /// </summary>
  /// <param name="ht"></param>
  /// <param name="arParams"></param>
  public static void setParameters(Hashtable ht, OracleParameterCollection arParams)
  {
   // OracleParameter 갯수만큼 반복해서 Hashtable 값을 지정한다
   for (int i=0;i<arParams.Count;i++)
   {
    // 공백은 공백으로 넘기는것으로 수정
    //if (ht[arParams[i].ParameterName] != null && ht[arParams[i].ParameterName].ToString().Trim() != "")
    if (ht[arParams[i].ParameterName] != null)
    {
     if (ht[arParams[i].ParameterName].ToString().Trim() == "")
     {
      switch (arParams[i].OracleType)
      {
//       case OracleType.Double :
//       case OracleType.Float :
//       case OracleType.Int16 :
//       case OracleType.Int32 :
//       case OracleType.Number :
//       case OracleType.UInt16 :
//       case OracleType.UInt32 :
//       case OracleType.DateTime :
//        arParams[i].Value = DBNull.Value;
//        break;
//       default :
//        arParams[i].Value = ht[arParams[i].ParameterName];
//        break;
       case OracleType.Char :
       case OracleType.VarChar:
        arParams[i].Value = ht[arParams[i].ParameterName];
        break;
       default :
        arParams[i].Value = DBNull.Value;
        break;

      }
     }
     else
     {
      arParams[i].Value = ht[arParams[i].ParameterName];
     }
    }
    else
    {
     arParams[i].Value = DBNull.Value;
    }
   }
  } 

  /// <summary>
  /// Procedure 로 부터 Parameter 값을 읽어서 OracleParameterCollection 객체로 Return 한다.
  /// </summary>
  /// <param name="connection"></param>
  /// <param name="spName"></param>
  /// <param name="includeReturnValueParameter"></param>
  /// <returns></returns>
  public static System.Data.OracleClient.OracleParameterCollection DiscoverSpParameterSet(System.Data.OracleClient.OracleConnection connection, string spName)
  {
   OracleCommand cmd = new OracleCommand(spName, connection);
   cmd.CommandType = CommandType.StoredProcedure;

   //connection.Open();
   OracleCommandBuilder.DeriveParameters(cmd);
   //connection.Close();

   System.Data.OracleClient.OracleParameterCollection discoveredParameters = new OracleParameterCollection();

   discoveredParameters = cmd.Parameters;

   // Init the parameters with a DBNull value
   foreach (OracleParameter discoveredParameter in discoveredParameters)
   {
    discoveredParameter.Value = DBNull.Value;
   }

   return discoveredParameters;
  }


  /// <summary>
  /// OracleParameterCollection 와 HashTable 의 값을 매칭시켜준다
  /// </summary>
  /// <param name="ht"></param>
  /// <param name="arParams"></param>
  public static void copyParameters(System.Data.OracleClient.OracleParameterCollection Params, LGCNS.DAC.DAParameterCollection DAparameters)
  {
   // OracleParameter 갯수만큼 반복해서 Hashtable 값을 지정한다
   for (int i=0;i<Params.Count;i++)
   {
    DAparameters.Add(Params[i]);
   }

   Params.Clear(); // DAparameters 의 내용을 삭제 안할경우 "이미 다른 Parameter 에 포함되어있습니다" 라는 에러가 남
  } 

  /// <summary>
  /// DAParameterCollection 값을 Hashtable 에 넣어준다
  /// </summary>
  /// <param name="DAparameters"></param>
  /// <returns></returns>
  public static Hashtable bind_HashTable_From_DAParameterCollection(LGCNS.DAC.DAParameterCollection DAparameters)
  {
   Hashtable htRtn = new Hashtable();

   for(int i=0;i<DAparameters.Count;i++)
   {
    System.Data.OracleClient.OracleParameter para = DAparameters[i];
    htRtn[para.ParameterName] = para.Value;
   }

   return htRtn;
  }

 }
}

+ Recent posts