【发布时间】:2011-04-24 11:20:54
【问题描述】:
我试图创建一个带有复选框的简单数据表单。它就像一个职责申请表,其中的复选框代表每个职责槽。
我正在对其进行测试,因此只需从下拉列表 (ddlID) 中选择用户 ID。
每当更改 ddlID 的选定索引时,系统就会从数据库中提取职责数据并以表格形式显示给用户,因此用户可以请求可用插槽或释放插槽(如果他/她之前已请求)。如果有人之前已经请求过某个特定位置,则该特定复选框将被禁用。
下面是我页面背后的代码。
string PCS1, R1S1 = "somevalue";
protected void Page_Load(object sender, EventArgs e)
{
lblDate.Text = DateTime.Now.ToLongDateString();
}
protected void ddlID_SelectedIndexChanged(object sender, EventArgs e)
{
if (IsPostBack)
{
SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString);
SqlCommand cmd = sqlConn.CreateCommand();
cmd.CommandText = "SELECT * FROM tbl_duty_location WHERE Shift = 'S1'";
sqlConn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
if (reader["PC"].ToString() == "n")
{
PCS1 = "n";
}
else if (reader["PC"].ToString() != "n")
{
PCS1 = reader["PC"].ToString();
}
if (reader["R1"].ToString() == "n")
{
R1S1 = "n";
}
else if (reader["R1"].ToString() != "n")
{
R1S1 = reader["R1"].ToString();
}
}
}
if (PCS1 == ddlID.SelectedItem.ToString())
{
chkPCS1.Enabled = true;
chkPCS1.Checked = true;
}
else if (PCS1 == "n")
{
chkPCS1.Enabled = true;
chkPCS1.Checked = false;
}
else if (PCS1 != ddlID.SelectedItem.ToString())
{
chkPCS1.Enabled = false;
chkPCS1.Checked = false;
}
if (R1S1 == ddlID.SelectedItem.ToString())
{
chkR1S1.Enabled = true;
chkR1S1.Checked = true;
}
else if (R1S1 == "n")
{
chkR1S1.Enabled = true;
chkR1S1.Checked = false;
}
else if (R1S1 != ddlID.SelectedItem.ToString())
{
chkR1S1.Enabled = false;
chkR1S1.Checked = false;
}
reader.Close();
sqlConn.Close();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (chkPCS1.Enabled == false)
{
Trace.Write("PCS1 is: ", PCS1);
}
else if (chkPCS1.Checked == false)
{
PCS1 = "n";
}
else if (chkPCS1.Checked)
{
PCS1 = ddlID.SelectedItem.ToString();
}
if (chkR1S1.Enabled == false)
{
Trace.Write("R1S1: ", R1S1);
}
else if (chkR1S1.Checked == false)
{
R1S1 = "n";
}
else if (chkR1S1.Checked)
{
R1S1 = ddlID.SelectedItem.ToString();
}
SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString);
SqlCommand cmd = sqlConn.CreateCommand();
cmd.CommandText = "UPDATE tbl_duty_location SET PC = @PC1, R1 = @R1 WHERE Shift = '1'";
cmd.Parameters.AddWithValue("PC1", PCS1);
cmd.Parameters.AddWithValue("R1", R1S1);
sqlConn.Open();
cmd.ExecuteNonQuery();
sqlConn.Close();
}
目前,在表格中,“PC”列已经有用户 ID,这意味着特定的插槽不可用。
但是,当我尝试使用不同的用户 ID 请求另一个插槽时,我收到了以下错误。
The parameterized query '(@PC1 nvarchar(4000),@R1 nvarchar(9))UPDATE tbl_duty_location SE' expects the parameter '@PC1', which was not supplied.
实际上,@PC1 应该是从数据库加载的 PCS1,但是一旦发生 btn_submit click 事件,PCS1 立即变为 null。
可能是什么问题?
【问题讨论】: