2012-08-16 13 views
9

Obecnie jestem tworzenia i czytania DataTable z następującego kodu w moim Page_LoadJak wypełnić DataTable z SQL tabeli

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

chciałbym wiedzieć jak przerobić ten kod tak, że czyta z kwerendy SQL ? Eksperymentuję z poniższym kodem, ale nie jestem pewien, jak je połączyć, aby dane podlegające obciążeniu strony wypełniały się poniższym poleceniem 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

gdzie jesteś zatrzymany? Która linia? –

+0

ta tabela liniowa = (DataTable) Session ["AllFeatures1"]; Chciałbym, żeby to była t1 = (DataTable) Sesja ["AllFeatures1]; – AhabLives

+0

Więc co cię powstrzymuje." Znasz kod –

Odpowiedz

4

Trzeba zmodyfikować metodę GetData() i dodać "eksperymentalne" kod tam .. i powrócić t1 ..

zrobić.

+0

Tak ... masz rację zostałem złapany w blokadę mózgu z Page_Load chwilę powiedziałeś umieścić swój kod pracy w GetData() Wyskoczyłem z mojego "umieść wszystko w Page_Load" zamrożenie.Dziękuję za szturchańcę – AhabLives

28

Numer SqlDataReader jest prawidłowym źródłem danych dla DataTable. Jako takie, wszystko co trzeba zrobić swoje tak:

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

On już wypełnia tabelę z 'SqlDataAdapter' więc on przeszedł ten punkt .. – banging

+1

To odpowiada pytanie "Jak wypełnić DataTable z SQL Table_" idealnie.Jeśli nie jest specyficzne dla OP, wówczas OP nie zadeklarował wystarczająco dobrze jego pytania – xpt

+0

Lepiej, jeśli nie używasz metody DataReader.Load() do odczytu wszystkich typów SQL Wybierz zapytanie, użyłem go do odczytania złożonego SELECT z LEWYM DOŁĄCZEM i otrzymałem komunikat "Nie udało się włączyć ograniczeń. Jeden lub więcej wierszy zawiera wartości naruszające ograniczenia nie-zerowe, unikalne lub ograniczenia obcymi kluczami. "Po rozpoczęciu korzystania z typu zapytania DataAdapter.Fill (DataTable), a teraz bez wyjątków. – Jettero

6

Można uczynić metodę, która wrócić DataTable z danego zapytania 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; 
} 

i teraz może być używany tak:

table = GetDataTable(); 
1

Powyższe odpowiedzi są poprawne, ale pomyślałem, że mogę rozszerzyć kolejną odpowiedź, oferując sposób, aby zrobić to samo, jeśli wymagane jest przekazanie parametrów do zapytania.

Model SqlDataAdapter jest szybki i prosty, ale działa tylko wtedy, gdy wypełniasz tabelę statycznym żądaniem, np .: prosty SELECT bez parametrów.

Oto mój sposób, aby zrobić to samo, ale za pomocą parametru kontrolować dane, które wymagają w mojej tabeli. Używam go do wypełnienia 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 
     } 
    } 
} 

Ciesz

Powiązane problemy