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;
}
}
}
'.net' 카테고리의 다른 글
ASP.NET Intrinsic Objects (2) | 2007.05.03 |
---|---|
Request, Response, Browser 개체 살펴보기 (2) | 2007.05.03 |
Move Over DataGrid, There's a New Grid in Town! (1) | 2007.05.03 |
.NET 개발자를 위한 저장 프로시저 평가 (2) | 2007.05.03 |
SqlHelper 클래스 (1) | 2007.04.26 |