Je suis en train de créer et de lire un DataTable avec le code suivant dans mon Page_Load
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;
}
}
Je voudrais savoir comment convertir ce code afin qu'il puisse lire à partir d'une requête SQL? J'expérimente avec le code ci-dessous mais je ne suis pas sûr de savoir comment les connecter pour que la datatable dans mon chargement de page se remplisse avec la commande SQL ci-dessous.
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);
}
Vous devez modifier la méthode GetData()
et y ajouter votre code "expérimental" .. et renvoyer t1
..
Terminé.
SqlDataReader
est une source de données valide pour DataTable
. En tant que tel, tout ce que vous devez faire est le suivant:
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;
}
Vous pouvez créer une méthode qui renvoie le datatable d'une requête SQL donnée:
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;
}
et maintenant peut être utilisé comme ceci:
table = GetDataTable();
Les réponses ci-dessus sont correctes, mais je pensais développer une autre réponse en offrant un moyen de faire de même si vous aviez besoin de transmettre des paramètres à la requête.
La SqlDataAdapter
est simple et rapide, mais ne fonctionne que si vous remplissez une table avec une requête statique, c'est-à-dire: une simple SELECT
sans paramètres.
Voici ma façon de faire la même chose, mais en utilisant un paramètre pour contrôler les données dont j'ai besoin dans ma table. Et je l'utilise pour remplir une 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
}
}
}
Prendre plaisir
Vous pouvez remplir votre table de données comme ci-dessous. Je récupère également les connexions à l'exécution à l'aide d'un fichier XML prédéfini contenant toutes les connexions.
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;
}
}