如何使用SQL表填充DataTable

我目前正在使用Page_Load中的以下代码创建和读取DataTable

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

你需要修改方法GetData()并在那里添加你的“实验”代码..并返回t1 ..

完成。

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

您可以创建返回给定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(); 

上面的答案是正确的,但我想如果你需要将参数传递给查询,我会通过提供一种方法来扩展另一个答案。

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(" 

请享用

您可以像下面的代码一样填充数据表。我还使用具有所有连接的预定义XML文件在运行时获取连接。

  public static DataTable Execute_Query(string connection, string query) { Logger.Info("Execute Query has been called for connection " + connection); connection = "Data Source=" + Connections.run_singlevalue(connection, "server") + ";Initial Catalog=" + Connections.run_singlevalue(connection, "database") + ";User ID=" + Connections.run_singlevalue(connection, "username") + ";Password=" + Connections.run_singlevalue(connection, "password") + ";Connection Timeout=30;"; DataTable dt = new DataTable(); try { using (SqlConnection con = new SqlConnection(connection)) { using (SqlCommand cmd = new SqlCommand(query, con)) { con.Open(); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { da.SelectCommand.CommandTimeout = 1800; da.Fill(dt); } con.Close(); } } Logger.Info("Execute Query success"); return dt; } catch (Exception ex) { Console.Write(ex.Message); return null; } }