首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlCommandBuilder更新未按预期工作

sqlCommandBuilder更新未按预期工作
EN

Stack Overflow用户
提问于 2014-04-05 09:40:40
回答 2查看 432关注 0票数 0

我正在尝试使用CommandBuilder进行更新。当通过按钮命令检索获取数据的代码时,代码工作得很好,但是当我从page_load获取数据时,更新失败。

该程序只需从数据库中获取数据,然后使用sqlCommandBuilder对特定表进行更新。

我搞不懂到底是怎么回事。

下面是失败的代码。

代码语言:javascript
复制
  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";
    }
}

以下是完美工作的代码。

代码语言:javascript
复制
 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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-05 10:02:03

你错过了Page.IsPostBack的支票吗?

请记住,在ASP.NET中,单击服务器按钮时,在单击事件按钮中的代码之前调用Page_Load中的代码。

不带

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{ 
     if(!Page.IsPostBack)
     {
         // load data
     }

}

重新加载数据集的代码将再次执行,当您在按钮单击事件中接收到控件时,您的更改将丢失。

票数 0
EN

Stack Overflow用户

发布于 2014-04-05 10:01:44

fisrt对您的源代码进行调试。

在每一行上创建断点,并检查哪些值存储在变量包中。

还可以在try catch块中调试purpouse。

当您了解错误发生的位置时,您可以检查以修复问题。

您收到哪种类型的错误??

另一个假设用户总是处于session.Take状态的东西是aspnet使用自定义方法循环会话,并且您可以使会话为空,因为iis应用程序池已重新启动。

是在进行强制转换之前检查会话(值)是否为空的良好实践。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22879171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档