C# sqlCommandBuilder更新未按预期工作

C# sqlCommandBuilder更新未按预期工作,c#,asp.net,insert,sqlcommandbuilder,C#,Asp.net,Insert,Sqlcommandbuilder,我正在尝试使用CommandBuilder进行更新。当通过按钮命令检索获取数据的代码时,该代码工作正常,但当我从页面加载中获取数据时,更新失败 该程序只需从数据库获取数据,然后使用sqlCommandBuilder对特定表进行更新 我不知道发生了什么事 下面是失败的代码 private Users users; protected void Page_Load(object sender, EventArgs e) { users = (Users)Session["Users"]

我正在尝试使用CommandBuilder进行更新。当通过按钮命令检索获取数据的代码时,该代码工作正常,但当我从页面加载中获取数据时,更新失败

该程序只需从数据库获取数据,然后使用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;
    }
}

首先对源代码进行调试

在每行上创建断点,并检查哪些值存储在varibales中

也可以在try-catch块中为debug-purpouse设置

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

您收到哪种类型的错误

您假定用户始终处于会话中的另一种情况。请注意,aspnet使用自定义方法回收会话,并且您可以使会话为空,因为iis应用程序池已重新启动,并且已达到限制

在进行转换之前,如果sessionvalue为null,是否是一个良好的做法检查您是否错过了检查

请记住,在ASP.NET中,当您单击服务器按钮时,页面加载中的代码在按钮单击事件中的代码之前被调用

没有

protected void Page_Load(object sender, EventArgs e)
{ 
     if(!Page.IsPostBack)
     {
         // load data
     }

}

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

什么不起作用?你调试代码了吗?您是否收到任何异常或错误消息?请说得更具体些。。您可以阅读,请使用参数化查询。这种字符串连接对SQL注入攻击是开放的。我真不敢相信我错过了。我显然想得太多了。非常感谢。很高兴能帮上忙。我希望您作为一个新用户记住,如果您发现下面的一个或多个答案有用,您可以对其进行投票并选择一个作为接受答案。看见