none
Acceso a datos en Web Forms y MVC RRS feed

  • Pregunta

  • Amigos buenas tardes, actualmente ando trabajando en ASP.NET Web Forms, pero quiero ir viendo como es el asunto con ASP.NET MVC.

    Pregunta, en Web Forms yo utiliza la siguientes sentencias para obtener datos; puedo utilizar lo mismo en MVC? He visto que ya no utilizan datatable, pero en su reemplazo puedo utilizar datareader?

    Como pueden ver invoco sp's con parametros, es en la base de datos donde realizo la gestión de la información...

    Dim cnComercial As New SqlConnection
    Dim slqCommando As New SqlCommand
    Dim dtBasico = New DataTable
    
    Using cnComercial
       cnComercial.ConnectionString = ConfigurationManager.ConnectionStrings("BaseDatos").ConnectionString
       cnComercial.Open()
       slqCommando.Connection = cnComercial
    
       slqCommando.Parameters.Clear()
       slqCommando.Parameters.AddWithValue("@codigo", "123456")
       slqCommando.CommandText = "Exec NroServicio_ObtenerRegistroBasico_pa @IdNroServicio = @codigo"
       SQLAdapter = New SqlDataAdapter(slqCommando)
       SQLAdapter.Fill(dtBasico)
    
    End Using
    Le agradeceria darme algunas indicaciones, como modificarian este codigo para que funciones en MVC? por que eso de crear un datacontext, poner las tablas en ellas y luego invocarlas en el modelo aun no me convencen, ya que yo en mis sp's hago un monton de operaciones para al final obtener un resultado, es decir, el resultado no siempre es la estructura de una sola tabla, como he visto en los ejemplos de internet.

    Saludos.



    miércoles, 23 de marzo de 2016 23:11

Respuestas

  • hola

    >>puedo utilizar lo mismo en MVC? He visto que ya no utilizan datatable, pero en su reemplazo puedo utilizar datareader?

    como poder puedes usarlo, pero si la idea es llevar este como model para la view lo veo dificil

    lo que se aconseja es definir una clase y usar algo como ser

    public class Item{
    	public string Prop1 {get;set;}
    	public string Prop2 {get;set;}
    	public string Prop3 {get;set;}
    }
    
    List<Item> lista = new List<Item>();
    
    string connstring = "connection string";  
    using (SqlConnection cn = new SqlConnection(connstring)) {  
        cn.Open();  
     
        string sql = "SELECT campo1, campo2, campo3 FROM Tabla WHERE id =@id";  
        SqlCommand cmd = new SqlCommand(query, cn);  
        cmd.Parameters.AddwithValue("@id", Convert.Toint32(txtId.Text));  
     
        SqlDataReader reader = cmd.ExecuteReader();  
     
        while (reader.Read())  
        {  
    	Item obj = new Item();
            obj.Prop1 = Convert.ToString(reader["campo1"]);  
            obj.Prop2 = Convert.ToString(reader["campo2"]);  
            obj.Prop3 = Convert.ToString(reader["campo3"]);  
    		
    	lista.Add(obj);
        }  
     
    } 

    esto es solo un ejemplo de como usarias el datareader

    >>por que eso de crear un datacontext, poner las tablas en ellas y luego invocarlas en el modelo aun no me convencen

    pero eso seria usar entity framework, basicamente usarias un ORM mapeando las tablas a las entidades

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Edwin Delgado jueves, 24 de marzo de 2016 17:31
    jueves, 24 de marzo de 2016 0:43

Todas las respuestas

  • hola

    partamos de la base que de esa forma no se ejecuta un procedure, sino que deebria ser algo como

    DataTabla dt = new DataTable(); 
    using (SqlConnection conn = new SqlConnection("connectionstring")) 
    { 
    
        SqlCommand cmd = new SqlCommand("NroServicio_ObtenerRegistroBasico_pa", conn); 
        cmd.CommandType = SqlCommandType.StoredProcedure; 
    
        cmd.Parameters.AddWithValue("@codigo", "123456")
        
        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        da.Fill(dt); 
    }
    se define solo el nombre sin el "Exec" y se indica el CommandType

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 24 de marzo de 2016 0:40
  • hola

    >>puedo utilizar lo mismo en MVC? He visto que ya no utilizan datatable, pero en su reemplazo puedo utilizar datareader?

    como poder puedes usarlo, pero si la idea es llevar este como model para la view lo veo dificil

    lo que se aconseja es definir una clase y usar algo como ser

    public class Item{
    	public string Prop1 {get;set;}
    	public string Prop2 {get;set;}
    	public string Prop3 {get;set;}
    }
    
    List<Item> lista = new List<Item>();
    
    string connstring = "connection string";  
    using (SqlConnection cn = new SqlConnection(connstring)) {  
        cn.Open();  
     
        string sql = "SELECT campo1, campo2, campo3 FROM Tabla WHERE id =@id";  
        SqlCommand cmd = new SqlCommand(query, cn);  
        cmd.Parameters.AddwithValue("@id", Convert.Toint32(txtId.Text));  
     
        SqlDataReader reader = cmd.ExecuteReader();  
     
        while (reader.Read())  
        {  
    	Item obj = new Item();
            obj.Prop1 = Convert.ToString(reader["campo1"]);  
            obj.Prop2 = Convert.ToString(reader["campo2"]);  
            obj.Prop3 = Convert.ToString(reader["campo3"]);  
    		
    	lista.Add(obj);
        }  
     
    } 

    esto es solo un ejemplo de como usarias el datareader

    >>por que eso de crear un datacontext, poner las tablas en ellas y luego invocarlas en el modelo aun no me convencen

    pero eso seria usar entity framework, basicamente usarias un ORM mapeando las tablas a las entidades

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Edwin Delgado jueves, 24 de marzo de 2016 17:31
    jueves, 24 de marzo de 2016 0:43
  • Hola Leandro.

    Ok, voy a probar con la forma que indicas; queria evitar el bucle (while o foreach) para llenar la clase, pero veo que no hay otra forma, por eso me gustaban los datatables, ya tenias la data en ella y directamente la enlazabas al datasource del control deseado.

    Quizas con entity framework se puede evitar ese bucle, pero veo (en los ejemplos de internet) que solo funciona teniendo a las tablas maestras puestas en el datacontext como una especie de plantilla, y como dije inicialmente los resultados, en produccion, no siempre son los campos de una sola tabla; en fin, a adaptarse.

    Saludos.

    jueves, 24 de marzo de 2016 17:31