2012-08-16 77 views
9

我目前建立在我的Page_Load閱讀下面的代碼的DataTable如何填寫數據表與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; 
    } 
} 

我想知道如何將這個代碼,以便它從一個SQL查詢讀取轉換?我正在試驗下面的代碼,但我不知道如何連接它們,以便我的頁面加載中的數據表格填充下面的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

你在哪裏卡住了?哪條線? – 2012-08-16 18:27:28

+0

this line table =(DataTable)Session [「AllFeatures1」]; 我希望它是t1 =(DataTable)Session [「AllFeatures1]; – AhabLives 2012-08-16 18:32:01

+0

那麼什麼是阻止你的?你知道代碼 – 2012-08-16 18:38:36

回答

4

您需要修改方法GetData(),並添加你的 「實驗性」 的代碼有..並返回t1 ..

完成。

+0

是的......你是正確的我在Page_Load時刻被腦鎖定你說你的工作代碼在GetData()中彈出我的「將所有內容放在Page_Load中」凍結。謝謝你的推動。 – AhabLives 2012-08-16 18:48:08

28

SqlDataReaderDataTable的有效數據源。因此,所有你需要做的是:

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

他已經用'SqlDataAdapter'填充表,所以他已經超過了這一點.. – banging 2012-08-16 18:34:30

+1

這回答問題「_如何用SQL Table_填充DataTable」完美如果它不是專用於OP,那麼OP沒有足夠好地標題他的問題 – xpt 2017-03-06 16:35:39

+0

如果您不使用DataReader.Load()方法來讀取所有類型的SQL選擇Query,我用它讀出一個帶有一些LEFT JOIN的複雜SELECT,然後我得到「無法啓用約束。一個或多個行包含違反非空,唯一或外鍵約束的值「異常。在我開始使用DataAdapter.Fill(DataTable)類型的Query之後,現在沒有出現異常。 – Jettero 2017-05-06 22:13:08

6

可以使方法,它返回給定的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; 
} 

,現在可以這樣使用:

table = GetDataTable(); 
1

上面的答案是正確的,但我認爲如果您需要將參數傳遞到查詢中,則可以通過提供相同方法來擴展另一個答案。

SqlDataAdapter快速簡單,但只適用於用靜態請求填充表格的情況,即:不帶參數的簡單SELECT

這是我的方式來做同樣的事情,但使用一個參數來控制我需要在我的表中的數據。我用它來填充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 
     } 
    } 
} 

享受