Siempre me a gustado trabajar en capas por eso les mostrare desde como hacer el SP (Store Procedure) el llamado de una clase, y la aplicación en el Form
Bueno el SP es un código que me va a traer en este caso los roles de un sistema y los campos que retorna son el Id y el Nombre
SP:
CREATE procedure[dbo].[trae_datos_roles]
as
begin
select Id_rol, Nombre_rol from Tbl_rol
end
Luego que tenemos el SP funcionado pasamos al llamado a alguna clase en este caso le llame Roles
public DataSet retorna_roles()
{
Nombre_Sp = "trae_datos_roles";
ds = cargar_dataset(Nombre_Sp, ref mensaje_error, ref numero_error);
if (numero_error == 0)
return ds;
else
return null;
En este código se esta usando otra clase llamada UtilidadesBD(Valida las conexiones) que se conecta con la Clase DAL(Lenguaje de acceso a datos) en este caso lo que se manda por parámetros es el nombre del SP y este devuelve un Data Set con la información requerida (Si necesitan las otras clases escríbanme y se las puedo pasar)
Con eso ahora podemos cargar nuestro combo box en el form
Yo cree un procedimiento para llamar a la carga de este combo box de esta manera:
Nomenclatura= cb = combo box , ds = DataSet
void carga_roles()
{
objroles = new Roles();
ds = new DataSet();
ds = objroles.retorna_roles();
cb_roles.DataSource = ds.Tables[0];
cb_roles.DisplayMember = ds.Tables[0].Columns["Nombre_rol"].ColumnName;
cb_roles.ValueMember = ds.Tables[0].Columns["Id_rol"].ColumnName;
objroles = null;
}
Bueno para explicar un poco al inicio llamo a la Clase Roles que vimos ahora la inicializo, luego creo un data set y lo inicializo también, luego cargo se data set con el data set que me retorna el procedimiento de la Clase roles.
Cargo se data set al combo box con la propiedad DataSource.
Luego evaluó para saber que es lo que necesito mostrar al usuario final y cual es el valor que voy a utilizar en mi código para esto están las propiedades DisplayMember y ValueMember como se utiliza en el código anterior
Con esto vamos a tener un combo box cargado con items de la base de datos
hola brother, me gusta tu ejemplo y me gustaria que me ayudaras en un pequeño proyecto que estoy desarrollando en capas y procedimientos almacenados... En como llamar desde un combobox datos de un bbdd en sqlserver con storeprocedure.
ResponderEliminartambien quisiera saber el evento a utilizar... este es un ejemplo en un txt y me funciona correctamente:
ResponderEliminarNegFarmacia farmaci = new NegFarmacia();
DataTable tbdatos = new DataTable();
tbdatos = farmaci.mostrar(txtLocalidad.Text);
DGVFarmacias.DataSource = tbdatos;
Hola amigo en el caso del combo puedes usar un evento del combobox que se llama SelectedIndex_Changed
ResponderEliminarY la del txt no entiendo tu pregunta!!
Saludos y bendiciones
Hola de nuevo, mi nombre es Ramiro y soy de Nicaragua. Estoy haciendo un proyecto para mi tesis y se trata de un sistema de Escritorio en Visual C# 2010 con SQL server 2008 por ahora local y con procedimientos almacenados y en 3 capas (Negocio, Datos y Presentación). Se trata del llenado de datos de un monitoreo… El problema que tengo por ahora es:
ResponderEliminarTengo 1 tabla llamada Farmacia con los atributos (Municipio, Categoría, Nombre_Farmacia), donde ya existen datos de cada uno. Ahora yo quiero en cada atributo desde mi formulario mandarlo a llamar desde un combobox, pero que al elegir mi opción desde el primero, se me autocomplete el que sigue y así sucesivamente… y que al final me muestre todos esos datos en un datagridview.
Mi procedimiento almacenado para mostrar primero el municipio es:
ResponderEliminarALTER PROCEDURE dbo.Buscar_MunicipioReportes
@Municipio varchar(25)
AS
select Municipio from Farmacia where Municipio=@Municipio
RETURN
En mi capa de negocios para la tabla Farmacia:
ResponderEliminarclass NegFarmacia
{
#region //Declaración de las Variables, Parte de la Capa de Negocio
private int Id_Farmacia;
private string Categoria;
private string Localidad;
private string Municipio;
private string msg;
#endregion
#region //Propiedades Metodos(Get y Set)
public int _Id_Farmacia
{
get { return Id_Farmacia; }
set { Id_Farmacia = value; }
}
public string _Categoria
{
get { return Categoria; }
set { Categoria = value; }
}
public string _Localidad
{
get { return Localidad; }
set { Localidad = value; }
}
public string _Municipio
{
get { return Municipio; }
set { Municipio = value; }
}
#endregion
#region Busqueda de municipio para el combobox
ResponderEliminarpublic DataTable buscar_Municipio(string Municipio)
{
dtFarmacia farm = new dtFarmacia();
_Municipio = Municipio;
return farm.buscar_municipio(this);
}
#endregion
Mi capa de Acceso a Datos siempre para la tabla Farmacia:
ResponderEliminar#region BUSQUEDA DE MUNICIPIO PARA EL COMBOBOX
public DataTable buscar_municipio(NegFarmacia datos)
{
DataTable dtfarmac = new DataTable();
DbProviderFactory Factory = DbProviderFactories.GetFactory(Conexion._proveedor);
DbCommand comando = datosgenericos.crearcomando();
comando.CommandText = "Buscar_MunicipioReportes";
comando.CommandType = CommandType.StoredProcedure;
DbParameter muni = Factory.CreateParameter();
muni.ParameterName = "@Municipio";
muni.Value = datos._Municipio;
comando.Parameters.Add(muni);
try
{
return datosgenericos.ExecuteReader(comando);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
En la capa de Acceso a Datos agregué un clase llamada Conexión y otra llamada Datos Genéricos:
ResponderEliminarclass Conexion
{
private static string cadenaconexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\apd_sismonfarma.mdf;Integrated Security=SSPI;User Instance=True";
private static string proveedor = "System.Data.SqlClient";
public static string _cadenaconexion
{
get { return cadenaconexion; }
}
public static string _proveedor
{
get { return proveedor; }
}
}
///////////////////////////////////
Datos Genéricos:
class datosgenericos
{
public static bool buscar(DbCommand command)
{
try
{
command.Connection.Open();
DbDataReader reader = command.ExecuteReader();
return reader.Read();
}
catch (Exception ex)
{
throw ex;
//command.Connection.Close();
}
finally
{
command.Connection.Close();
}
}
public static DataTable ExecuteReader(DbCommand command)
{
DataTable table;
try
{
command.Connection.Open();
DbDataReader reader = command.ExecuteReader();
table = new DataTable();
table.Load(reader);
}
catch (Exception ex)
{
throw ex;
}
finally
{
command.Connection.Close();
}
return table;
}
//Crear comando generico para compatibilidad con cualquier proveedor(oracle,mysql,sql)
public static DbCommand crearcomando()
{
string cadenaconexion = Conexion._cadenaconexion;
string proveedor = Conexion._proveedor;
DbProviderFactory factory = DbProviderFactories.GetFactory(proveedor);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = cadenaconexion;
DbCommand comando = connection.CreateCommand();
comando.CommandType = CommandType.StoredProcedure;
return comando;
}
public static int modificar(DbCommand command)
{
int columnas_afectadas = -1;
try
{
command.Connection.Open();
columnas_afectadas = command.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
command.Connection.Close();
}
return columnas_afectadas;
}
public static string valor_string(DbCommand command)
{
string valor = "";
try
{
command.Connection.Open();
valor = command.ExecuteScalar().ToString();
}
catch (Exception ex)
{ throw ex; }
finally
{
command.Connection.Close();
}
return valor;
}
}
Te agradezco de todo corazón tu ayuda... Me encantaría que me ayudaras y nos pusiéramos en contacto para conocernos... Saludes y gracias de nuevo...
ResponderEliminarhola Bro... ya lo conseguí; si quieres te puedo dar como resolverlo...
ResponderEliminarBuenas noches!!
ResponderEliminarquisiera preguntarte como se puede hacer que al seleccionar algun item en el combo box, se muestren los datos enlazados a el, como por ejemplo tengo un combo box que me muestre los diferentes estados de la republica y al seleccionar algun estado mostrar en otro combo box los municipios
Hola tu aplicación es de escritorio o web
Eliminarme podrias pasar las otras clases por favor? mi correo es alexandra.pool@hotmail.com
ResponderEliminarClaro pero que tipo de proyecto estas creando??
Eliminar