venerdì 19 ottobre 2012

Richiamo di una stored procedure in c#

In questo esempio viene richiamata con c# una stored procedure contenente un campo in input.
Il db utilizzato è Oracle e viene restituita una lista di record che puo' essere integrata in una lista di oggetti tipizzata (in questo caso di Employee).

public List<Employee> LoadData()
 {
 List<Employee> listEmployee = new List<Employee>();
 Employee employee = new Employee();
  
 using (OracleCommand cmd = con.CreateCommand())
 {
  /* write name of stored procedure */
  cmd.CommandText = "SCHEMA_DB.test_store_procedure";
  cmd.CommandType = CommandType.StoredProcedure;
     
  /* input for stored procedure, for example NVarChar */
  cmd.Parameters.Add("IN_NAME_FIELD1", OracleType.NVarChar).Value = "test";
  cmd.Parameters["IN_NAME_FIELD1"].Direction = ParameterDirection.Input;
     
  /* return from store procedure */
  cmd.Parameters.Add("OUTPUT", OracleType.Cursor).Direction = ParameterDirection.Output;
  
  DataTable dt = new DataTable();
     
  /* call stored procedure */
  using (OracleDataReader oracleDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
  {
   dt.Load(oracleDataReader);
  }
     
  /* read values */
  foreach (DataRow dr in dt.Rows) 
  {
   employee = new Employee();
   
   if (dr["NAME"] != DBNull.Value)
   employee.name = (string)dr["NAME"];
   else
   employee.name = "";
   
   listEmployee.Add(employee);
  }
  }
  return listEmployee;
  }
}