0

CommandBuilder を使用して更新しようとしています。データを取得するコードをボタン コマンドで取得すると、コードは完全に機能しますが、page_load からデータを取得すると、更新が失敗します。

このプログラムは、データベースからデータを取得し、sqlCommandBuilder を使用して特定のテーブルを更新するだけです。

何が起こっているのかわかりません。

失敗するコードは次のとおりです。

  private Users users;

protected void Page_Load(object sender, EventArgs e)
{
    users = (Users)Session["Users"];

    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    string selectQuery = "Select * from Candidate where Candidate_ID = " + users.Candidate_ID;
    SqlDataAdapter dataAdapter = new SqlDataAdapter(selectQuery, connection);

    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet, "Candidates");
    ViewState["DATASET"] = dataSet;
    ViewState["SELECT_QUERY"] = selectQuery;

    if (dataSet.Tables["Candidates"].Rows.Count > 0)
    {
        DataRow dataRow = dataSet.Tables["Candidates"].Rows[0];


        txtLastName.Text = dataRow["LastName"].ToString();
        txtCity.Text = dataRow["City"].ToString();
        ddlGender.SelectedValue = dataRow["Gender"].ToString();
        lblStatus.Text = "";
    }
    else
    {
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Text = "No record with ID = " + txtCandidateID.Text;
    }


}


protected void btnUpdate_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);

    SqlDataAdapter dataAdapter = new SqlDataAdapter();
    dataAdapter.SelectCommand = new SqlCommand((string)ViewState["SELECT_QUERY"], con);
    SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);

    DataSet ds = (DataSet)ViewState["DATASET"];

    DataRow dr = ds.Tables["Candidates"].Rows[0];

    dr["LastName"] = txtLastName.Text;
    dr["Gender"] = ddlGender.SelectedValue;
    dr["City"] = txtCity.Text;

    int rowsUpdated = dataAdapter.Update(ds, "Candidates");
    if (rowsUpdated == 0)
    {
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Text = "No rows updated";
    }
    else
    {
        lblStatus.ForeColor = System.Drawing.Color.Green;
        lblStatus.Text = rowsUpdated.ToString() + " row(s) updated";
    }
}

これが完全に機能するコードです。

 protected void Page_Load(object sender, EventArgs e)
{


}


protected void btnUpdate_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);

    SqlDataAdapter dataAdapter = new SqlDataAdapter();
    dataAdapter.SelectCommand = new SqlCommand((string)ViewState["SELECT_QUERY"], con);
    SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);

    DataSet ds = (DataSet)ViewState["DATASET"];

    DataRow dr = ds.Tables["Candidates"].Rows[0];

    dr["LastName"] = txtLastName.Text;
    dr["Gender"] = ddlGender.SelectedValue;
    dr["City"] = txtCity.Text;

    int rowsUpdated = dataAdapter.Update(ds, "Candidates");
    if (rowsUpdated == 0)
    {
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Text = "No rows updated";
    }
    else
    {
        lblStatus.ForeColor = System.Drawing.Color.Green;
        lblStatus.Text = rowsUpdated.ToString() + " row(s) updated";
    }
}




protected void btnFetchData_Click(object sender, EventArgs e)
{
    users = (Users)Session["Users"];

    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    string selectQuery = "Select * from Candidate where Candidate_ID = " + users.Candidate_ID;
    SqlDataAdapter dataAdapter = new SqlDataAdapter(selectQuery, connection);

    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet, "Candidates");
    ViewState["DATASET"] = dataSet;
    ViewState["SELECT_QUERY"] = selectQuery;

    if (dataSet.Tables["Candidates"].Rows.Count > 0)
    {
        DataRow dataRow = dataSet.Tables["Candidates"].Rows[0];


        txtLastName.Text = dataRow["LastName"].ToString();
        txtCity.Text = dataRow["City"].ToString();
        ddlGender.SelectedValue = dataRow["Gender"].ToString();
        lblStatus.Text = "";
    }
    else
    {
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Text = "No record with ID = " + txtCandidateID.Text;
    }
}
4

2 に答える 2