这是我目前的代码:
private void editButton2_Click(object sender, EventArgs e)
{
connection.Open();
try
{
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = string.Format(
@"update Customer
set Title='{0}',
[Name]='{1}',
Member='{2}',
Email='{3}',
[Phone No]='{4}',
[Facility]='{5}',
[Unit Size]='{6}',
[Start Date]='{7}',
[Rent Duration]='{8}',
[End Date]='{9}',
[Storage Item]='{10}',
[Air Condition]='{11}',
[Total Monthly Cost]='{12}',
[Total Rental Cost]='{13}'
{14}",
titleComboBox2.Text,
nameTextBox2.Text,
memberComboBox2.Text,
emailTextBox2.Text,
phoneNoTextBox2.Text,
facilityComboBox2.Text,
unitSizeComboBox2.Text,
start_DTP2.Value.ToString("yyyy-MM-dd"),
rentDurationTextBox2.Text,
end_DTP2.Value.ToString("yyyy-MM-dd"),
storageItemComboBox2.Text,
airConComboBox2.Text,
totalMonthlyCostTextBox2.Text,
totalRentalCostTextBox2.Text,
"where TransactionNo=" + idTextBox.Text + "");
command.CommandText = query;
command.ExecuteNonQuery();
MessageBox.Show("Data edited");
}
catch (Exception exception)
{
MessageBox.Show(exception.ToString());
}
connection.Close();
}
以下是我希望程序运行的方式:
1)用户输入他/她想要编辑的数据的交易号到idTextBox
2)然后,用户可以选择他/她想要编辑的值。例如,如果他/她想要编辑客户的名称,他/她应该将新名称键入nameTextBox2并将其余部分留空
3)用户点击编辑按钮,数据应根据更新。旧名称应替换为用户输入的新名称。其余数据应保持不变。例如。客户的电子邮件应保持不变,而不是空白
但是我的程序要求我将值键入每个文本框和组合框以使其工作。为什么会这样?
答案 0 :(得分:0)
根据textboxex的值生成查询。仅在值不为空时更新
StringBuilder query = New StringBuilder();
//Name
if (this.nameTextBox2.Text.Length > 0)
{
query.AppendLine(", [Name]=@Name");
command.Parameters.Add("@Name", OleDbType.VarChar).Value = this.nameTextBox2.Text;
}
//Email
if (this.emailTextBox2.Text.Length > 0)
{
query.AppendLine(", Email=@Email");
command.Parameters.Add("@Email", OleDbType.VarChar).Value = this.emailTextBox2.Text;
}
// ...
// And other control in same way
// Then check if something updated
if(query.Length == 0)
Return;
// Remove first "," character if updates exists
query.Remove(0,1);
query.Insert("UPDATE Customer SET ");
query.AppendLine("WHERE TransactionNo=@TranNo");
OleDbParameter tranno = New OleDbParameter("@TranNo", OleDbType.Integer);
tranno.Value = Int32.Parse(this.idTextBox.Text);
command.Parameters.Add(tranno);
// Run query
command.CommandText = query.ToString();
command.ExecuteNonQuery();
请记住使用Parameterized query
,因为评论中提到了@Soner
另一种方法是在输入交易号后将当前数据加载到文本框 然后,您的查询将更新已更改的值并复制编辑后未更改的值