C# sqlCommandBuilder更新未按预期工作
我正在尝试使用CommandBuilder进行更新。当通过按钮命令检索获取数据的代码时,该代码工作正常,但当我从页面加载中获取数据时,更新失败 该程序只需从数据库获取数据,然后使用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"]
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注入攻击是开放的。我真不敢相信我错过了。我显然想得太多了。非常感谢。很高兴能帮上忙。我希望您作为一个新用户记住,如果您发现下面的一个或多个答案有用,您可以对其进行投票并选择一个作为接受答案。看见