Member 14352065 Ответов: 3

Как я могу преобразовать это значение в varchar в C#?


Пока я пытался выполнить этот код и внезапно заполнить поля текстового поля, а затем, когда я нажал кнопку Обновить, появилось необработанное исключение SqlException и сказал: "преобразование не удалось при преобразовании системы значений varchar".Окна.Формы.TextBox, Text:12345 ' to тип данных int. И ЦМД.ExecuteNonQuery(); был выделен. Я надеюсь, что кто-то помог мне решить эту проблему. Я не знаю, что я собираюсь сделать.

Объект sqlconnection sqlcon = новое sqlconnection("источник данных=.\\Именем sqlexpress;ключевое слово attachdbfilename=С:\\Пользователи\\Джон\\\документы\Visual Studio 2010 с\\проекты\\Вход\\вход\\dblogin.МДФ;Комплексная безопасность=true;в подключения таймаут=30;пользовательский экземпляр=true в");
sqlcon.Открыть();
Команда sqlcommand cmd и = новая команда sqlcommand("обновление tbl_employee установить имя='" + поле textbox2 + "' где Ид_сотрудника='" + textbox1 элемент + "'");
УМК.Соединение = sqlcon;
УМК.Метод executenonquery();
sqlcon.Закрывать();
Ящик для сообщений.Show("запись успешно обновлена");

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

Я попытался объявить соединение cmd, которое было равно sqlcon, но оно еще не работает. Как это работает?

3 Ответов

Рейтинг:
2

Christian Graus

Другой ответ будет работать, но я могу стереть вашу базу данных, если вы сделаете это.

В общем, жизнь красивее с Entity Framework, но если вы должны работать таким образом, Пожалуйста, прочтите это:

Урок 06: добавление параметров в команды - станция C# [^]

Также ваш объект sqlconnection предпринимательства, осуществляет IDisposable и должны быть в операторе using


Nirav Prabtani

Скомпенсировано вниз-голосуйте !!

Christian Graus

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

CHill60

Я думаю, что Нирав дал тебе 5, чтобы компенсировать то, что тот, кто дал тебе 2

Nirav Prabtani

Я не говорю, что вы понизили мой ответ, кто-то понизил ваш ответ, поэтому я компенсировал ваш ответ, проголосовав за него на 5+

Christian Graus

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

Рейтинг:
2

MadMyche

Это быстрый макет того, как я бы переписал это. Здесь сделано несколько изменений.

1. Проверка. Убедитесь, что ваши текстовые поля заполнены и содержат корректные данные
2. с помощью блок. Это гарантирует, что ваш SqlConnection будет удален должным образом
3. Параметризации. Это лучший способ избежать SQL-инъекции
4. Оценка. Проверьте, на сколько строк на самом деле повлияла ваша команда SQL

int RowsAffected = -1;
string MessageboxContent = string.Empty;

int EmployeeID = -1;
string Firstname = textBox2.Trim();

// rudimentary validation to make sure you have valid values
if ((int.TryParse(textBox1, out EmployeeID) && (Firstname.length > 0)) { 

  using (SqlConnection sqlcon = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\john\\Documents\\Visual Studio 2010\\Projects\\Login\\Login\\dblogin.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")) {
    sqlcon.Open();

    SqlCommand cmd = new SqlCommand("UPDATE tbl_employee SET Firstname= @Firstname WHERE Employee_ID= @EmployeeID", sqlcon);
    cmd.Parameters.AddWithValue("@Firstname", Firstname);
    cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID);

    RowsAffected = cmd.ExecuteNonQuery();
    sqlcon.Close();
  }
}

switch (RowsAffected) {
  case -1: MessageboxContent = "Invalid data entereed"; break;
  case 0: MessageboxContent = "Employee not found, record not updated";
  case -1: MessageboxContent = "Record has been updated Successfully";
  default: MessageboxContent = string.Format("Error: {0} records updated", RowAffected); break;
}

MessageBox.Show(MessageboxContent);


Рейтинг:
0

Patrice T

SqlCommand cmd = new SqlCommand("update tbl_employee set Firstname='" + textBox2 + "' where Employee_ID='" + textBox1 + "'");

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]