| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Добавление записей в таблицу |
| Автор: Vitkaz 1.4.2009, 22:21 |
| Привет всем! Недавно начал изучать C#. Сейчас создаю базу данных, для чего проделал следующее: создал таблицы и связи между ними в SQL Server 2005, в Visual Studio 2008 установил соединение с сервером, создал форму, которая содержит Grid, textbox`ы и кнопку "Добавить клиента". Как добавить новую запись в таблицу я не знаю ? Помогите пожалуйста написать содержимое события button1_Click. |
| Автор: Rififi 1.4.2009, 23:40 |
| Vitkaz, есть несколько способов в самом простом случае - создать объект Command и выполнить sql-запрос INSERT INTO скачай/купи любую книгу с названием ADO.NET 2.0, например Professional ADO.NET 2, Pro ADO.NET 2.0 ..., или от папиков - Programming Microsoft® ADO.NET 2.0, причём многие из них имеются в переводном виде. там всё это описано |
| Автор: kuller 2.4.2009, 09:20 | ||||||
Ну вот тебе пример добавления ЗАПИСИ в таблицу Список_блюд в БД kafe.mdb: (тут добавляемые данные вводятся в ТЕКСТБОКСЫ и также значения берутся с КОМБОБОКСОВ, по нажатию на кнопку происходит добавление данных)
P.S. using System.Data.OleDb |
| Автор: Vitkaz 2.4.2009, 15:38 | ||
Изменил код, который дал kuller. Пробую пока ввести только ИНН.
При добавлениии ругается на строку con.Close(). Пишет следующее сообщение: System.Data.OleDb.OleDbException не обработано Message="Невозможно использовать ''; файл уже используется." |
| Автор: kuller 2.4.2009, 19:08 |
| Vitkaz, попробуйте заносить значения ни в 1 поле таблицы clients(InnCl), а во все и будьте внимательны с ТИПАМИ, из-за неправильного типа заносимых данных чаще всего и бывают ошибки!!!! |
| Автор: Vitkaz 2.4.2009, 20:28 |
| Чтобы с преобразованиями типов не напутать, я создал таблицу всего с одним полем и попробовал добавить запись, но возникает та же ошибка. |
| Автор: kuller 2.4.2009, 21:15 | ||
Vitkaz, Ваше поле в которое Вы в данный момент пытаетесь добавить значение КАКОГО ТИПА???? |
| Автор: Vitkaz 2.4.2009, 21:34 | ||
| Тип nchar(10). У меня были проблемы с соединением, но теперь соединение устанавливается, но записи добавить не получается. Решил добавить запись, используя SqlCommand, но не знаю, что писать после SqlCommand command = new SqlCommand(queryString, con);
|
| Автор: kuller 2.4.2009, 21:39 |
| Vitkaz, если Вы вставляете ТЕКСТ, то дорлно быть так записано в SQL-запросе: '" + textBox1.Text + "', т.е. кавычки ОДИНАРНЫЕ затем ДВОЙНЫЕ . |
| Автор: Vitkaz 2.4.2009, 22:18 | ||
Пробовал не помогает. |
| Автор: KelTron 3.4.2009, 04:58 | ||||
Но лучше использовать параметизированные запросы:
|
| Автор: Vitkaz 3.4.2009, 07:03 |
| KelTron, спасибо за рекомендацию. После учебы попробую. |
| Автор: Vitkaz 3.4.2009, 15:00 | ||||
Если пишу так,
то ругается на строчку command.ExecuteNonQuery(); "Неправильный синтаксис около ключевого слова "Table"." Ещё пробовал описать CreateCommand(string queryString,string connectionString) в класее Program в Program.cs, не знаю как обратиться к CreateCommand с формы.
|
| Автор: Idsa 3.4.2009, 15:32 | ||
А у Вас точно есть таблицы Table? И если она даже есть, лучше взять ее в квадратные скобки:
, ибо Table - это зарезервированное слово. |
| Автор: Vitkaz 3.4.2009, 15:36 |
| Спасибо, Idsa! Причина была в этом. |
| Автор: Vitkaz 3.4.2009, 18:35 |
| А если использовать параметизированные запросы, как KelTron посоветовал, нужно ли производить преобразования типов ? |
| Автор: Idsa 3.4.2009, 19:02 |
| Vitkaz, провайдеры обычно умные, поэтому реализуют приведение типов... но, конечно, в разумных пределах. |
| Автор: Vitkaz 3.4.2009, 20:20 |
| С добавлением всё получилось. Скажите пожалуйста, а как сделать refresh т.е. чтобы внесенные изменения отобразились в Grid`е после добавления ? Попробовал делать, как ранее делал в FoxPro: this.dataGridView1.Refresh();, но что-то не получается. |
| Автор: KelTron 4.4.2009, 09:38 | ||
| Vitkaz, метод Refresh() заставляет грид перерисовать себя ) Как делать обновление грида зависит от того как ты биндишь к нему данные. Могу предположить, что в твоём случае подойдёт такой код:
|
| Автор: Vitkaz 4.4.2009, 22:44 |
| На форме есть кнопки "Сохранить изменения" и "Удалить клиента", скажите пожалуйста: 1)Как после внесения изменений в сетке Grid и кликнув соответствующую кнопку, сохранить эти изменения в БД. 2)Как, выбрав строку в Grid`е и ---||---||---, удалить соответствующую запись из БД. Данные принадлежат одной таблице. Если нетрудно, скажите как проделать тоже самое, когда данные принадлежат нескольким таблицам. Надоел наверное с вопросами, понимаю что во многом можно разобраться самому, просто время ограничено. После сдачи сессии думаю заняться изучением .NET более полно. |
| Автор: Vitkaz 12.4.2009, 15:36 | ||
Не стал создавать новую тему. Возникла следующая проблема: мне нужно сделать запрос и результат этого запроса добавить в таблицу. Я решил посмотреть содержимое запроса, поместив результат в TextBox, но при выполнении ругается на строку textBox13.Text = reader[0].ToString(); "Недопустимая попытка чтения при отсутствии данных."
Пробую выводить этот запрос в Grid, все нормально. Подскажите пожалуйста, что не так. |
| Автор: KelTron 13.4.2009, 06:55 | ||||
Перед чтением данных из датаридера нужно вызвать метод Read
если у тебя в результате возвращается множество записей то их все нужно читать в цикле:
|
| Автор: Vitkaz 13.4.2009, 16:34 |
| Понял. Спасибо! |
| Автор: Vitkaz 26.4.2009, 14:55 | ||
Заполняю Combobox, который зависит от выбранной строки в другом Combobox`е . Вот фрагмент кода.
Подскажите, как перед заполнением Combobox`а очистить его содержимое. |
| Автор: Vitkaz 26.4.2009, 15:10 | ||||
Уже нашел comboBox8.Items.Clear(); |