Добавление новых данных в БД c#
Всем привет. Мне нужно добавить новые данные в существующую БД. Мой код:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Data Source=DESKTOP-7BKNE6D\SQLEXPRESS;Initial Catalog=Matveev_VT-31;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("INSERT INTO [Customers] (Name, Address, Phone, ContactPerson) Values(@Name, @Address, @Phone, @ContactPerson)");
command.Connection = connection;
command.Parameters.AddWithValue("Name", textBox1.Text);
command.Parameters.AddWithValue("Address", textBox2.Text);
command.Parameters.AddWithValue("Phone", textBox3.Text);
command.Parameters.AddWithValue("ContactPerson", textBox4.Text);
command.ExecuteNonQuery();
this.customersTableAdapter.Fill(this._Matveev_VT_31DataSet1.Customers);
customersDataGridView.Update();
customersDataGridView.Refresh();
}
}
}
}
}
Выдаёт 4 ошибки:
Ошибка CS1061 "Form7" не содержит определения для "customersTableAdapter", и не удалось найти доступный метод расширения "customersTableAdapter", принимающий тип "Form7" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Ошибка CS1061 "Form7" не содержит определения для "_Matveev_VT_31DataSet1", и не удалось найти доступный метод расширения "_Matveev_VT_31DataSet1", принимающий тип "Form7" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Ошибка CS0117 "customersDataGridView" не содержит определение для "Update".
Ошибка CS0117 "customersDataGridView" не содержит определение для "Refresh".
В чём проблема? Все бд подключены работают корректно
Ответы (1 шт):
Всё правильно - Вам выдаются "правильные ошибки".
Смотрим в код. Там процедура ДОБАВЛЕНИЯ данных, которая, навскидку, написана и работает корректно.
Только три строки в ней -
this.customersTableAdapter.Fill(this._Matveev_VT_31DataSet1.Customers);
customersDataGridView.Update();
customersDataGridView.Refresh();
уже не относятся к добавлению данных и являются лишними.
Удалите их - и у вас по нажатию на кнопку новые данные будут записываться в базу инсертом.
А то, что написано в этих трех строках - это уже не относится к доабвлению данных. Это - процесс отображения заполненного дата адаптера на форме - чтобы вы на форме увидели дата грид с новыми данными.
Но ведь вы страшиваете не об этом, а о добавлени? Добавление - будет работать.
Советую процесс обновления дата адаптера сделать отдельным от операций с данными, например, вынеся его еще в один блок usiung{}
Ну, и об ошибках, про котрые говирится дальше.
Итак. Добавлять - умеем, всё правильно написано, очень простая задача - вызывать один insert с параметрами.
Отображать - задача уже более сложная.
"Отображатель" говорит вам - "хозяин, я умею данные показывать, добавлять и удалять... только ты мне скажи, какие SQL команды для этого надо вызвать!".
То есть, логика того компонента, который называется customersTableAdapter - это логика "прослойки" между датагридом customersDataGridView и базой данных.
По большому счёту, эта прослойка не так уж плоха: она однйо стороной смотрит на дата грид, и когда в нём пользователь делает операцию "вставить строку" - она генерирует для базы данных insert. "Удалить строку" - прослойка генерирует "Delete". Но разобраться с её логикой - это не так просто.
Самое простое для начала работы - вообще выбросить из системы data adapter, и обходиться data grid и самой базой. Заполнять и обновлять data grid вручную. Это потребует написать больше кода, зато этот код будет делать ровно то, что Вам нужно.