miércoles, 6 de enero de 2010

DEVOLVER MAS DE UN OUTPUT EN UN METODO

Aca les va otra xD, resulta que el procedimiento almacenado tenia 2 OUTPUT por lo que yo debia capturarlos y devolverlos, bueno para esto use un arreglo unidimensional de esta forma capturo los 2 valores y los devuelvo ahhh, pero el problema surge en los valores del tipo string o varchar como lo veas resulta que para que funcione debes colocar el tamaño del valor OUTPT que vas a recibir.

public string[] InsertarPesaje()
{
try
{
SqlCommand ObjScdComman = new SqlCommand();
Conexion ObjConexion = new Conexion();

ObjScdComman.CommandType = CommandType.StoredProcedure;
ObjScdComman.CommandText = "BAL_I_Pesaje_OUT";

ObjScdComman.Parameters.Add(new SqlParameter("@pes_Ticket", SqlDbType.VarChar, 50));
ObjScdComman.Parameters.Add(new SqlParameter("@pes_IdPesaje", SqlDbType.Int));
ObjScdComman.Parameters.Add(new SqlParameter("@pes_FechaLleno", SqlDbType.SmallDateTime));
ObjScdComman.Parameters.Add(new SqlParameter("@pes_FechaVacio", SqlDbType.SmallDateTime));
.......

ObjScdComman.Parameters["@pes_Ticket"].Direction = ParameterDirection.Output;
ObjScdComman.Parameters["@pes_IdPesaje"].Direction = ParameterDirection.Output;

ObjScdComman.Parameters["@pes_FechaLleno"].Value = this.Cmp_DatPes_FechaLleno;
ObjScdComman.Parameters["@pes_FechaVacio"].Value = this.Cmp_DatPes_FechaVacio;
......

ObjScdComman.Connection = ObjConexion.Conectar();
ObjScdComman.ExecuteNonQuery();

string[] ArrValores = new string[2];

ArrValores[0] = Convert.ToString(ObjScdComman.Parameters["pes_Ticket"].Value.ToString());
ArrValores[1] = Convert.ToString(ObjScdComman.Parameters["pes_IdPesaje"].Value.ToString());

ObjConexion = null;
ObjScdComman = null;
return ArrValores;//Convert.ToInt32(PrpStrpesTicket);

espero les sea de utilidad.

COMO EDITAR LOS VALORES DE UN DATATABLE

Cuando traia una consulta esta llega en un datatable en mi caso y si queria editar alguno dato de la consulta en la clase no podia asi es que tenia que crear otro y ahi insertar los datos ya modificados y me pareceia que era una locura estar creando tantos datatables innecesariamente asi es que me puse a leer y logre encontrar la forma de editarlos directamente.

DataTable ObjTablaDetalle = new ObjTablaDetalle();

.....

ObjTablaDetalle.Rows[fila].BeginEdit();
ObjTablaDetalle.Rows[fila][columna]= Valor;
ObjTablaDetalle.Rows[fila].EndEdit();
.......

Espero les sirva

COMO LLENAR UNA LISTA CON UN DATATABLE EN C#

Este pequeño ejemplo esta desarrollado en una aplicacion en tres capas con procedimientos almacenados, esto surgio debido a que cuando instancias a la clase (ClsClase Objclase = new ClsClase();) esta por defecto toma los campos o declarados, el problema surge cuando generaba una consuilta estos campos se amarraban y me forzaban a tomar la estructura definida en la clase pero como a mi esa estructura no me servia tuve que crear una estructura exclusivamente para el metodo que era necesario que le devuelva en un list, aunque para mi mas facil seria enviarle el datatable xD pero ni modo asi lo querian espero les sirva.

public List<StrucBuscarMarcaModelo> BuscarMarcaModelo(int Intmar_IdMarca,int Intmod_IdModelo)
{
SqlCommand ObjScdCommand = new SqlCommand();
ConexionCatalogo ObjConexion = new ConexionCatalogo();

SqlDataAdapter ObjSdaAdapter = new SqlDataAdapter();
DataTable ObjDteTabla = new DataTable();

List
<StrucBuscarMarcaModelo> ObjLstBusqueda = new List<StrucBuscarMarcaModelo>();
try
{
ObjScdCommand.CommandType = CommandType.StoredProcedure;
ObjScdCommand.CommandText = "CAT_S_MarcaModelo";

ObjScdCommand.Parameters.Add(new SqlParameter("@mar_IdMarca", SqlDbType.Int));
ObjScdCommand.Parameters.Add(new SqlParameter("@mod_IdModelo", SqlDbType.Int));

ObjScdCommand.Parameters["@mar_IdMarca"].Value = Intmar_IdMarca;
ObjScdCommand.Parameters["@mod_IdModelo"].Value = Intmod_IdModelo;

ObjScdCommand.Connection = ObjConexion.Conectar();
ObjScdCommand.ExecuteNonQuery();

ObjSdaAdapter.SelectCommand = ObjScdCommand;
ObjSdaAdapter.Fill(ObjDteTabla);

foreach (DataRow item in ObjDteTabla.Rows)
{
ObjLstBusqueda.Add(new StrucBuscarMarcaModelo
{
Prp_IntMar_IdMarca = Convert.ToInt32(item[0].ToString()),
Prp_IntMod_IdModelo = Convert.ToInt32(item[1].ToString()),
Prp_StrMam_Observacion = item[2].ToString()
});
}
return ObjLstBusqueda;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

Aca les dejo la estructura de la lista la cual es consumida por el metodo BuscarMarcaModelo

public struct StrucBuscarMarcaModelo
{
public int Prp_IntMar_IdMarca { get; set; }
public int Prp_IntMod_IdModelo { get; set; }
public string Prp_StrMam_Observacion { get; set; }
}