2012-08-16 22 views
9

actualmente estoy creación y lectura de un DataTable con el código siguiente en mi LoadCómo llenar DataTable con la tabla de SQL

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["AllFeatures1"] == null) 
    { 
     Session["AllFeatures1"] = GetData(); 
    } 
    table = (DataTable)Session["AllFeatures1"]; 
    DayPilotCalendar1.DataSource = Session["AllFeatures1"]; 
    DayPilotNavigator1.DataSource = Session["AllFeatures1"]; 

    if (!IsPostBack) 
    { 
     DataBind(); 
     DayPilotCalendar1.UpdateWithMessage("Welcome!"); 
    } 

    if (User.Identity.Name != "") 
    { 
     Panel1.Visible = true; 
    } 
} 

me gustaría saber cómo convertir el código para que se lea de una consulta SQL ? Estoy experimentando con el siguiente código, pero no estoy seguro de cómo conectarlos para que la tabla de datos en la carga de mi página se llene con el comando SQL a continuación.

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["BarManConnectionString"].ConnectionString); 
conn.Open(); 
string query = "SELECT * FROM [EventOne]"; 

SqlCommand cmd = new SqlCommand(query, conn); 

DataTable t1 = new DataTable(); 
using (SqlDataAdapter a = new SqlDataAdapter(cmd)) 
{ 
    a.Fill(t1); 
} 
+0

¿Dónde estás atascado? ¿Cual linea? –

+0

this line table = (DataTable) Session ["AllFeatures1"]; Me gustaría que fuera t1 = (DataTable) Session ["AllFeatures1]; – AhabLives

+0

¿Qué te detiene?" Conoces el código. –

Respuesta

4

resulta necesario modificar el método GetData() y añadir su código de "experimental" allí .. y volver t1 ..

Done.

+0

Sí ... tienes razón Me pillaron en un bloqueo cerebral con Page_Load el momento dijiste poner tu código de trabajo en GetData() Salí de mi congelación de "poner todo en Page_Load" Gracias por el empujón – AhabLives

28

La SqlDataReader es una fuente de datos válida para DataTable. Como tal, todo lo que tiene que hacer su presente:

public DataTable GetData() 
{ 
    SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["BarManConnectionString"].ConnectionString); 
    conn.Open(); 
    string query = "SELECT * FROM [EventOne]"; 
    SqlCommand cmd = new SqlCommand(query, conn); 

    DataTable dt = new DataTable(); 
    dt.Load(cmd.ExecuteReader()); 
    conn.Close(); 
    return dt; 
} 
+1

Él ya está llenando la tabla con un 'SqlDataAdapter' por lo que ha pasado ese punto ... – banging

+1

Esto responde al pregunta "_Cómo rellenar DataTable con SQL Table_" a la perfección. Si no es específico para OP, OP no tituló su pregunta lo suficiente. – xpt

+0

Mejor si no usas el método DataReader.Load() para leer todo tipo de SQL Seleccionar consulta. Lo usé para leer un complejo SELECT con algunos LEFT JOIN y obtuve el mensaje "Falló para habilitar restricciones". Una o más filas contienen valores que violan la excepción de restricciones no nulas, exclusivas o de clave externa. Después de que comencé a usar el tipo de consulta DataAdapter.Fill (DataTable) y ahora no hay excepción. – Jettero

6

Usted puede hacer método que devuelve la tabla de datos de consulta SQL dada:

public DataTable GetDataTable() 
{ 
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["BarManConnectionString"].ConnectionString); 
conn.Open(); 
string query = "SELECT * FROM [EventOne] "; 

SqlCommand cmd = new SqlCommand(query, conn); 

DataTable t1 = new DataTable(); 
using (SqlDataAdapter a = new SqlDataAdapter(cmd)) 
{ 
    a.Fill(t1); 
} 
return t1; 
} 

y ahora se puede utilizar como esto:

table = GetDataTable(); 
1

Las respuestas anteriores son correctas, pero pensé que ampliaría otra respuesta ofreciendo una forma de hacer lo mismo si necesita pasar parámetros a la consulta.

El SqlDataAdapter es rápido y simple, pero solo funciona si está llenando una tabla con una solicitud estática, es decir: un simple SELECT sin parámetros.

Esta es mi manera de hacer lo mismo, pero usando un parámetro para controlar los datos que necesito en mi tabla. Y lo uso para llenar un DropDownList.

//populate the Programs dropdownlist according to the student's study year/preference 
DropDownList ddlPrograms = (DropDownList)DetailsView1.FindControl("ddlPrograms"); 
if (ddlPrograms != null) 
{ 
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ATCNTV1ConnectionString"].ConnectionString)) 
    { 
     try 
     { 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandText = "SELECT ProgramID, ProgramName FROM tblPrograms WHERE ProgramCatID > 0 AND ProgramStatusID = (CASE WHEN @StudyYearID = 'VPR' THEN 10 ELSE 7 END) AND ProgramID NOT IN (23,112,113) ORDER BY ProgramName"; 
      cmd.Parameters.Add("@StudyYearID", SqlDbType.Char).Value = "11"; 
      DataTable wsPrograms = new DataTable(); 
      wsPrograms.Load(cmd.ExecuteReader()); 

      //populate the Programs ddl list 
      ddlPrograms.DataSource = wsPrograms; 
      ddlPrograms.DataTextField = "ProgramName"; 
      ddlPrograms.DataValueField = "ProgramID"; 
      ddlPrograms.DataBind(); 
      ddlPrograms.Items.Insert(0, new ListItem("<Select Program>", "0")); 
     } 
     catch (Exception ex) 
     { 
      // Handle the error 
     } 
    } 
} 

Disfrute

Cuestiones relacionadas