14

現在、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);
}

私は立ち往生しています:

table = (DataTable)Session["AllFeatures1"]; 

そうであってほしいt1 = (DataTable)Session["AllFeatures1];

4

5 に答える 5

39

はのSqlDataReader有効なデータソースですDataTable。そのため、これを行うために必要なのは次のとおりです。

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;
}
于 2012-08-16T18:33:41.403 に答える
10

指定された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();
于 2012-08-16T18:35:20.983 に答える
7

メソッドを変更し、GetData()そこに「実験的」コードを追加して、を返す必要がありますt1

于 2012-08-16T18:32:13.293 に答える
2

上記の答えは正しいですが、クエリにパラメーターを渡す必要がある場合は、同じことを行う方法を提供することで、別の答えを拡張すると思いました。

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

楽しみ

于 2015-06-24T03:56:39.957 に答える