我正在嘗試使用CommandBuilder進行更新。當獲取數據的代碼被按鈕命令獲取時,代碼完美工作,但是當我從page_load獲取數據時,更新失敗。sqlCommandBuilder更新不能按預期工作
該程序只是從數據庫中提取數據,然後使用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;
}
}
什麼不正確?你調試了你的代碼嗎?你得到任何異常或錯誤信息? Plesae更具體..你可以閱讀[FAQ],[問]和[幫助]並請使用參數化查詢。這種字符串連接對於SQL注入攻擊是開放的。 –