如何使用textBox从SQL数据库中获取选定的ID并更新信息?

时间:2019-06-26 11:23:44

标签: c# sql

当用户在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中的上述字段。

谢谢

1 个答案:

答案 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;