C# 根据复选框更新某些框
我的页面上有一个复选框,当选中该复选框时,可以启用我输入的一半内容(主要是文本框),我需要在C#中编写代码,无论发生什么情况,都会更新前半行,如果选中该复选框,则添加其他内容。我有我在下面尝试过的代码,但如何才能有效地完成这项任务C# 根据复选框更新某些框,c#,asp.net,C#,Asp.net,我的页面上有一个复选框,当选中该复选框时,可以启用我输入的一半内容(主要是文本框),我需要在C#中编写代码,无论发生什么情况,都会更新前半行,如果选中该复选框,则添加其他内容。我有我在下面尝试过的代码,但如何才能有效地完成这项任务 protected void Button1_Click(object sender, EventArgs e) { string updateSQL; updateSQL = "UPDATE Projects SET ";
protected void Button1_Click(object sender, EventArgs e)
{
string updateSQL;
updateSQL = "UPDATE Projects SET ";
updateSQL += "ProjectDescription=@ProjectDescription, ";
updateSQL += "DateAssigned=@StartDate, DueDate=@DueDate, SystemNumber=@SystemNumber ";
updateSQL += "WHERE ProjectName=@ProjectName";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ProjectsAndTasksTestConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand(updateSQL, con);
if (CheckBox_ProjectResults.Checked == false)
{
cmd.Parameters.AddWithValue("@ProjectName", DDL1.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ProjectDescription", UpdatetxtProjectDesc.Text);
cmd.Parameters.AddWithValue("@StartDate", UpdatetxtStartDate.Text);
cmd.Parameters.AddWithValue("@DueDate", UpdatetxtEndDate.Text);
cmd.Parameters.AddWithValue("@SystemNumber", DropDownList2.SelectedItem.Text);
}
if (CheckBox_ProjectResults.Checked == true)
{
string updateSQL;
updateSQL = "DateCompleted=@DateCompleted,TrackerNumber=@TrackerNumber, DocumentName=@DocumentName";
cmd.Parameters.AddWithValue("@DateCompleted", TxtActualEnd.Text);
cmd.Parameters.AddWithValue("@DocumentName", attachmentFileUpload.FileName);
cmd.Parameters.AddWithValue("@TrackerNumber", UpdatetxtTrackerNumber.Text);
cmd.Parameters.AddWithValue("@ProjectName", DDL1.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ProjectDescription", UpdatetxtProjectDesc.Text);
cmd.Parameters.AddWithValue("@StartDate", UpdatetxtStartDate.Text);
cmd.Parameters.AddWithValue("@DueDate", UpdatetxtEndDate.Text);
cmd.Parameters.AddWithValue("@SystemNumber", DropDownList2.SelectedItem.Text);
}
int updated = 0;
try
{
con.Open();
updated = cmd.ExecuteNonQuery();
lblResults.Text = updated.ToString() + " record updated.";
}
catch (Exception err)
{
lblResults.Text = "Error updating. ";
lblResults.Text += err.Message;
}
finally
{
con.Close();
}
}
更新2
protected void Button1_Click(object sender, EventArgs e)
{
if (CheckBox_ProjectResults.Checked == false)
{
string updateSQL;
updateSQL = "UPDATE Projects SET ";
updateSQL += "ProjectDescription=@ProjectDescription, ";
updateSQL += "DateAssigned=@StartDate, DueDate=@DueDate, SystemNumber=@SystemNumber ";
updateSQL += "WHERE ProjectName=@ProjectName";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ProjectsAndTasksTestConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand(updateSQL, con);
cmd.Parameters.AddWithValue("@ProjectName", DDL1.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ProjectDescription", UpdatetxtProjectDesc.Text);
cmd.Parameters.AddWithValue("@StartDate", UpdatetxtStartDate.Text);
cmd.Parameters.AddWithValue("@DueDate", UpdatetxtEndDate.Text);
cmd.Parameters.AddWithValue("@SystemNumber", DropDownList2.SelectedItem.Text);
try, catch, finally....
}
if (CheckBox_ProjectResults.Checked == true)
{
string updateSQL;
updateSQL = "UPDATE Projects SET ";
updateSQL += "ProjectDescription=@ProjectDescription, ";
updateSQL += "DateAssigned=@StartDate, DueDate=@DueDate, SystemNumber=@SystemNumber ";
updateSQL += "WHERE ProjectName=@ProjectName";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ProjectsAndTasksTestConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand(updateSQL, con);
cmd.Parameters.AddWithValue("@DateCompleted", TxtActualEnd.Text);
cmd.Parameters.AddWithValue("@DocumentName", attachmentFileUpload.FileName);
cmd.Parameters.AddWithValue("@TrackerNumber", UpdatetxtTrackerNumber.Text);
cmd.Parameters.AddWithValue("@ProjectName", DDL1.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ProjectDescription", UpdatetxtProjectDesc.Text);
cmd.Parameters.AddWithValue("@StartDate", UpdatetxtStartDate.Text);
cmd.Parameters.AddWithValue("@DueDate", UpdatetxtEndDate.Text);
cmd.Parameters.AddWithValue("@SystemNumber", DropDownList2.SelectedItem.Text);
try, catch, finally....
}
如果由于格式错误而创建了嵌套的,则忽略了嵌套的:
if (CheckBox_ProjectResults.Checked == false)
{
// code removed
if (CheckBox_ProjectResults.Checked == true)
{
// code removed
}
}
如果您正确缩进代码,您将很容易发现自己的问题:
if (CheckBox_ProjectResults.Checked == false)
{
// code removed
if (CheckBox_ProjectResults.Checked == true)
{
// code removed
}
}
另一个您需要注意的问题是字符串是不可变的,这意味着它们在赋值后不会改变值。在这通电话之后:
SqlCommand cmd = new SqlCommand(updateSQL, con);
此时,cmd
被设置为updateSQL
字符串。如果你写几行就行了
updateSQL += "...awesome sql string... ";
该更改不会更改cmd
中的sql字符串,更不用说它会变为神奇有效的sql了
让我们看看我们能做些什么来解决这个问题。我选择了一个实现,在这个实现中,我将sql的构建和添加的参数紧密地放在一起。我使用了,并且希望很好地处理连接,所以我将连接和命令包装在一个语句中
// dispose connection
using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ProjectsAndTasksTestConnectionString"].ConnectionString))
{
using(var cmd = new SqlCommand())
{
// when we += multiple string we better use a StringBuilder
StringBuilder updateSQL = new StringBuilder();
// create our update statement
updateSQL.Append("UPDATE Projects SET "); // there is as space on purpose!
// Checked is already a boolean so not much need
// to check if this is true it either is or it isn't
if (CheckBox_ProjectResults.Checked)
{
updateSQL.Append("DateCompleted=@DateCompleted,");
cmd.Parameters.AddWithValue("@DateCompleted", TxtActualEnd.Text);
updateSQL.Append("TrackerNumber=@TrackerNumber,");
cmd.Parameters.AddWithValue("@TrackerNumber", UpdatetxtTrackerNumber.Text);
updateSQL.Append("DocumentName=@DocumentName,");
cmd.Parameters.AddWithValue("@DocumentName", attachmentFileUpload.FileName);
else
{
updateSQL.Append("DateAssigned=@StartDate,");
cmd.Parameters.AddWithValue("@StartDate", UpdatetxtStartDate.Text);
updateSQL.Append("DueDate=@DueDate,")
cmd.Parameters.AddWithValue("@DueDate", UpdatetxtEndDate.Text);
updateSQL.Append("SystemNumber=@SystemNumber,");
cmd.Parameters.AddWithValue("@SystemNumber", DropDownList2.SelectedItem.Text);
}
// this is always there so make it our last one
updateSQL.Append("ProjectDescription=@ProjectDescription "); // notice no comma but a space!
cmd.Parameters.AddWithValue("@ProjectDescription", UpdatetxtProjectDesc.Text);
// no matter what Projectname is always there because it is the where!
cmd.Parameters.AddWithValue("@ProjectName", DDL1.SelectedItem.Text);
updateSQL.Append("WHERE ProjectName=@ProjectName");
cmd.Connection = con;
// call ToString on the String builder
cmd.CommandText = updateSQL.ToString();
int updated = 0;
try
{
con.Open();
updated = cmd.ExecuteNonQuery();
lblResults.Text = String.Format("{0} record(s) updated.", updated);
}
catch (SqlException sqlExc)
{
lblResults.Text = String.Format("Error updating. {0} - {1} - {2}"
, sqlExc.Message
, sqlExc.Number
, sqlExc.LineNumber);
}
}
}
@雷内,你的意思是改变我的括号吗?我试过了,但仍然得到了相同的错误…checkbox.checked显示true或false,这取决于它是否被选中,这是有效的,我编辑了我尝试的代码,但我想也许我需要摆脱updateSQL或将其移动到类似于第二次更新的位置,我知道它不会运行,但类似的东西会起作用吗?对于嵌套问题,我仍然不明白在您放置的前两个代码块之间有什么区别,我可以在C中查找嵌套以获得更多阅读,还是应该搜索其他内容?我必须查找stringbuilder,以便了解更多有关它的信息,else语句也有一个错误,前面还有最后一个“;”。谢谢你的解释,真的很有帮助。当然,没问题,很乐意帮忙。