C# как вставлять и искать данные в testbox в базе данных
Здравствуйте, я создаю интерфейс, который позволяет пользователю вводить или искать имя субъекта.
SubjectName Accounting Biology Bussiness Computer Science Computing English Law Maths
Проблема в том, что если я попытаюсь ввести новое имя субъекта, то появится ошибка
System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.' on program.cs
и еще один вопрос-как вставить новое имя субъекта в базу данных, добьюсь ли я этого на кнопке btnNext? как textbox может выполнить поиск имени из базы данных или вставить новое имя субъекта
Есть идеи? Спасибо
Что я уже пробовал:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace ProjectInterface { public partial class Concept : Form { MySqlConnection con = new MySqlConnection("server=localhost;Database=databse;Port = 3306; User ID = root; Password = password123"); MySqlCommand cmd = new MySqlCommand(); public Concept() { InitializeComponent(); } private void btnNextC_Click(object sender, EventArgs e) { con.Open(); string newcon = "Insert into tutorials(TutorialName) VALUES ('" + txtTuName.Text + " ')"; MySqlCommand cmd = new MySqlCommand(newcon, con); cmd.ExecuteNonQuery(); this.Hide(); Home home = new Home(); home.Show(); //next - go t oquestionnaire page //this.Hide(); //Questionnaire q = new Questionnaire(); //q.Show(); } private void btnCancelC_Click(object sender, EventArgs e) { //cancel button - go back to home page. this.Hide(); Home home = new Home(); home.Show(); } private void Concept_Load(object sender, EventArgs e) { } private void txtSubject_TextChanged(object sender, EventArgs e) { con.Open(); MySqlCommand cmd = new MySqlCommand("SELECT SubjectName From databse.subject WHERE SubjectName LIKE @name",con); cmd.Parameters.Add(new MySqlParameter("@name", "%" + txtSubject.Text + "%")); MySqlDataReader dr = cmd.ExecuteReader(); AutoCompleteStringCollection subjectColl = new AutoCompleteStringCollection(); while (dr.Read()) { subjectColl.Add(dr.GetString(0)); } txtSubject.AutoCompleteCustomSource = subjectColl; con.Close(); } }
j snooze
Эта ошибка может быть вызвана платформой, которую вы выбрали для компиляции приложения как. x86, 64 или любой другой процессор. Кроме того, я бы рекомендовал использовать параметризованный запрос для вашей вставки, как вы это делаете в операторе select.
Richard Deeming
string newcon = "Insert into tutorials(TutorialName) VALUES ('" + txtTuName.Text + " ')";
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Вы уже знаете, как использовать параметры, так как вы делаете это правильно в
txtSubject_TextChanged
метод.