2012-08-16 16 views
9

Attualmente sto Creazione e lettura di un DataTable con il seguente codice nel mio Page LoadCome riempire DataTable con la tabella 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; 
    } 
} 

Vorrei sapere come convertire il codice in modo che legge da una query SQL ? Sto sperimentando con il codice qui sotto ma non sono sicuro di come collegarli in modo che datatable nella mia pagina si carichi con il seguente comando SQL.

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

Dove sei bloccato? Quale linea? –

+0

questa tabella di riga = (DataTable) Session ["AllFeatures1"]; Mi piacerebbe che fosse t1 = (DataTable) Sessione ["AllFeatures1]; – AhabLives

+0

Quindi cosa ti sta fermando? Conosci il codice. –

risposta

4

è necessario modificare il metodo GetData() e aggiungere il codice "sperimentale" lì .. e tornare t1 ..

Done.

+0

Sì ... hai ragione Sono stato bloccato in un blocco mentale con Page_Load il momento hai detto di mettere il tuo codice di lavoro in GetData() sono saltato fuori dal mio "metti tutto in Page_Load" .Per grazie per il nudge. – AhabLives

28

Il SqlDataReader è un'origine dati valida per DataTable. Come tale, tutto ciò che serve per fare il suo 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

Ha già riempito la tabella con un 'SqlDataAdapter' così è passato quel punto .. – banging

+1

Questo risponde al domanda "_Come riempire perfettamente DataTable con SQL Table_" Se OP non è specifico per OP, OP non ha definito la sua domanda abbastanza bene – xpt

+0

Migliore se non si utilizza il metodo DataReader.Load() per leggere tutto il tipo di SQL Seleziona Query. L'ho usato per leggere un SELECT complesso con alcuni SINISTRA SINISTRA e ho ottenuto "Impossibile abilitare i vincoli. Una o più righe contengono valori che violano l'eccezione di vincoli non null, univoci o di chiavi esterne. Dopo aver iniziato a utilizzare il tipo di query DataAdapter.Fill (DataTable) e ora nessuna eccezione. – Jettero

6

Si può fare metodo che restituisce il datatable di determinata query SQL:

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; 
} 

e ora può essere utilizzato in questo modo:

table = GetDataTable(); 
1

Le risposte sopra sono corrette, ma ho pensato di espandere un'altra risposta offrendo un modo per fare lo stesso se è necessario passare i parametri nella query.

Il SqlDataAdapter è veloce e semplice, ma funziona solo se si sta riempiendo una tabella con una richiesta statica ad esempio: un semplice SELECT senza parametri.

Ecco il mio modo di fare lo stesso, ma utilizzando un parametro per controllare i dati richiesti nella tabella. E lo uso per popolare uno 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 
     } 
    } 
} 

Godetevi

Problemi correlati