Как получить выбранный идентификатор из базы данных SQL с помощью textBox и обновить информацию? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь обновить запись базы данных с указанием id в моей таблице, когда пользователи вводят свой идентификационный номер в textBox.
На данный момент он обновляет, но обновляет все записи в моей таблице, кроме записи, содержащей идентификационный номер пользователя.

Это код, который я сейчас использую:

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();
                    }
                }
            }

Во всей таблице есть еще много полей, но хотелось бы просто обновить вышеуказанные поля в пределах этого конкретного идентификатора.

Спасибо

1 Ответ

1 голос
/ 26 июня 2019

Вы забыли предложение 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...