Проблема C# в visual studio.
Я использую visual studio 2019 и пытаюсь вставить запись в локальную базу данных, созданную в visual studio. во время этого процесса я получаю эту ошибку
System.Data.SqlClient.SqlException: 'преобразование не удалось при преобразовании значения varchar 'string' в тип данных int.'
он говорит мне, что эта строка кода-неправильный cmd.Метод executenonquery();
но я тоже не понимаю что нужно менять
это мой код.
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 System.Data.SqlClient; namespace EmployeeDataBaseProject { public partial class Form1 : Form { SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Owner\Documents\Employee.mdf;Integrated Security=True;Connect Timeout=30"); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { con.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO Employee_Table VALUES('" + textBox1.Text + "',' " + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + comboBox1.Text + "')", con); cmd.ExecuteNonQuery(); MessageBox.Show("Inserted Data Successfully"); con.Close(); } } }
Что я уже пробовал:
Я не понимаю, как это исправить
Sinisa Hajnal
1) никогда не объединяйте пользовательский ввод (google SQL Injection)
2) проверьте, что все данные содержат правильный тип данных (это помогло бы, если бы у нас были имена столбцов или полезные имена элементов управления txtEmploymentDate или txtSalary или что-то еще)
F-ES Sitecore
Вы помещаете свои значения в кавычки, что указывает на то, что они являются текстовыми значениями, однако одно из полей в вашей таблице ожидает int. Как уже говорили другие, переключитесь на использование параметризованных запросов, это сделает код более легким для отслеживания и более надежным. Для поля, которое нуждается в int, вам нужно будет сначала преобразовать текстовое значение в int vlue с помощью int.Метод tryparse
Richard Deeming
В дополнение к этому SQL-инъекция[^] уязвимость в вашем коде, вы не указали столбцы для INSERT
заявление.
Всегда указывайте имена столбцов, в которые вы вставляете:
INSERT INTO Employee_Table (Column1, Column2, Column3, Column4, Column5) VALUES (@V1, @V2, @V3, @V4, @V5)
(Очевидно, что вам нужно будет использовать правильные имена столбцов для вашей таблицы.)