Member 10627757 Ответов: 3

Параметризуйте мои запросы


Мне посоветовали параметризовать все мои запросы. У меня возникли проблемы с изменением моих запросов. когда я нажимаю кнопку Сохранить, ничего не происходит. Я рефешировал свою базу данных, и она вставляется metroName1 into Name в базе данных а не то что я набираю в текстовом поле metroName1

UniConnection connection = new UniConnection("Provider=MySQL;host=127.0.0.1;user=###;password=###;database=dscomputers");
            try
            {
                UniCommand cmd = connection.CreateCommand();
                cmd.CommandText = "INSERT INTO customer (Name, Mobile, Landline, Othernumber, Address) VALUES (@Name, @Mobile, @Landline, @Othernumber, @Address)";
                UniParameter parameter = cmd.Parameters.Add("@Name", UniDbType.VarChar);
                parameter.Value = "metroName1";
                
                cmd.Parameters.Add(parameter);
                parameter = cmd.Parameters.Add("@Mobile, UniDbType.VarChar);
                parameter.Value = "metroMobile2";
                cmd.Parameters.Add(parameter);
                parameter = cmd.Parameters.Add("@Landline", UniDbType.VarChar);
                parameter.Value = "metroLand3";
                cmd.Parameters.Add(parameter);
                parameter = cmd.Parameters.Add("@Othernumber", UniDbType.VarChar);
                parameter.Value = "metroOther5";
                cmd.Parameters.Add(parameter);
                parameter = cmd.Parameters.Add("@Address", UniDbType.VarChar);
                parameter.Value = "metroOther4";
                cmd.Parameters.Add(parameter);
                connection.Open();
                cmd.ExecuteNonQuery();
            }
            finally
            {
                connection.Close();
            }

        }
    }
}


Что я уже пробовал:

Я пробовал разные варианты, но, кажется, совсем не понимаю. Я знаю, что у меня что-то не так, но никогда раньше не использовал параметризованные запросы

3 Ответов

Рейтинг:
2

Midi_Mick

Вы добавляете каждый параметр в коллекцию дважды. Ваш код использует шаблон:

parameter = cmd.Parameters.Add(name, type);
parameter.Value = value;
cmd.Parameters.Add(parameter);

либо уберите последнее Add(parameter) заявление, или использовать шаблон, как:
parameter = cmd.CreateParameter(name, type);
parameter.Value = value;
cmd.Parameters.Add(parameter);


или даже изменить cmd.CreateParameter чтобы просто new SQLParameter (или какой бы префикс БД вы ни использовали)


Рейтинг:
2

Wendelius

Как уже указывалось, вы дважды добавляете параметры в коллекцию параметров. Это вызывает некоторую путаницу. Кроме того, вы предоставляете статические значения для параметров вместо того, чтобы получать их из объектов пользовательского интерфейса. Действительно ли в этом смысл, поскольку все строки получают одинаковые значения? Вместо этого например для всех текстовых полей используйте Свойство text[^] или если Windows Forms тогда Текст[^]

Кроме того, вы должны правильно распорядиться соединением и командой для освобождения ресурсов. Возможно, Вам будет полезно прочитать следующее: Правильное выполнение операций с базой данных[^]

Да, и еще кое-что. Никогда не публикуйте имя пользователя или пароль на публичных форумах. Я их отредактировал.


Рейтинг:
1

Member 10627757

Получил его работу с помощью

parameter.Value = metroMobile2.Text;