当用户在id
中输入其ID号时,我正在尝试更新表中特定textBox
下的数据库条目。
目前,它会更新但更新我表中的所有条目,但包含用户ID号的条目除外。
这是我当前正在使用的代码:
private void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=DEVELOPMENT\ACCESSCONTROL;Initial Catalog=ACCESSCONTROL;User ID=sa;Password=P@55w0rd123");
SqlCommand check_User_Name = new SqlCommand("SELECT Id FROM NewVisitor WHERE (IDNumber = @IDNumber)", con);
check_User_Name.Parameters.AddWithValue("@IDNumber", idNumber_TxtBox.Text);
con.Open();
int UserExist = (int)check_User_Name.ExecuteScalar();
if (UserExist > 0)
{
var connetionString = @"Data Source=DEVELOPMENT\ACCESSCONTROL;Initial Catalog=ACCESSCONTROL;User ID=sa;Password=P@55w0rd123";
var sql = "UPDATE NewVisitor SET PersonVisit = @PersonVisit, PurposeVisit = @PurposeVisit, Duration = @Duration, Disclaimer = @Disclaimer";
try
{
using (var connection = new SqlConnection(connetionString))
{
using (var command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@PersonVisit", SqlDbType.NVarChar).Value = personVisiting_TxtBox.Text;
command.Parameters.Add("@PurposeVisit", SqlDbType.NVarChar).Value = purposeOfVisit_CMBox.SelectedItem;
command.Parameters.Add("@Duration", SqlDbType.Date).Value = duration_dateTimePicker1.Value.Date;
command.Parameters.Add("@Disclaimer", SqlDbType.NVarChar).Value = disclaimer_CHKBox.Checked;
connection.Open();
command.ExecuteNonQuery();
}
}
}
整个表格中还有更多字段,但只想更新该特定ID中的上述字段。
谢谢
答案 0 :(得分:1)
您忘记了WHERE
语句上的UPDATE
子句,特别告诉它要更新的记录。听起来您只想在WHERE
上添加完全相同的SELECT
子句:
var sql = "UPDATE NewVisitor SET PersonVisit = @PersonVisit, PurposeVisit = @PurposeVisit, Duration = @Duration, Disclaimer = @Disclaimer WHERE (IDNumber = @IDNumber)";
不要忘记为其添加参数:
command.Parameters.Add("@IDNumber", SqlDbType.Int).Value = idNumber_TxtBox.Text;
您可能需要先将输入值转换为整数,我不确定100%正确(已经有一段时间了,因为我不得不直接使用ADO.NET)。像这样:
if (!int.TryParse(idNumber_TxtBox.Text, out var idNumber))
{
// input wasn't an integer, handle the error
}
command.Parameters.Add("@IDNumber", SqlDbType.Int).Value = idNumber;