Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228

Написать запрос для одной таблички, который должен делать INSERT

23.10.2014, 00:48. Показов 980. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть програмка на шарпе с подключеной MSSQL2014. Надо написать запрос для одной таблички, который должен делать INSERT. Табличка у меня связана с 2 другими таблицами. manufact и category это FK на эти таблицы. Если делать простую вставку

то создаеться метод(InsertQuery) который принимает те параметры, что должны быть в таблице goods. Но я хочу вводить не id manufact и category, а их названия, тоисть мне надо сделать так, чтоб id manufact и category бралось из соответствуючих таблиц с помощю селекта по их именах. Пробовал сделать так:

не получаеться(сам запрос коректный, в Management Studio работает). Метод что сгенерировался не хочет принимать параметры manufact и category, а даже если принимал, то ключи у меня INT, a названия char.
Схемы таблиц

подскажите, каким способом можно решить эту проблему.
пробовал написать селекты для goods_categories и manufacturer, которые мне будут возвращать id, и в простой метод инсерта передавать их, но я не знаю как сделать так, чтоб метод который создатся возвращал мне этот id, как в этот метод передать название, по которому делать селект(типа такой
SQL
1
SELECT id FROM manufacturer WHERE m_name = @m_name
, как в селект передать аргумент, насколько я понял, только для insert, update, delete можно чтото передавать)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2014, 00:48
Ответы с готовыми решениями:

Написать запрос который выводит номер соответствующий хотя бы одной цифре введённого номера
Добрый день всем! Кто поможет, как написать запрос в БД. Есть две колонки: 1. Счётчик 2. Номера (образец: 12 09 78 45 01) через...

Соединить две таблички для одной выборки
Допустим есть табличка техника и продавец, как их соеденить, что б потом сделать выборку по определённым параметрам и из 1 таблички и из...

Написать макрос для Word, который будет делать автосумму как в Excel
Здравствуйте, помогоите пожалуйста написать макрос для Word, который будет делать автосумму как в Excel.

11
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.10.2014, 05:33

Не по теме:

o33ik, А почему бы не вставить все запросы с картинок текстом сюда, а не кидать ссылки на картинки на какой то сторонний сайт? Или вы думаете, что вводить код вручную, постоянно перемещаясь между вкладками - это удобнее, нежели скопипастить и подправить?

T-SQL
1
2
INSERT goods (article, g_name, manufact, category, price, number, descript)
    SELECT @article, @g_name, (SELECT Id FROM manufacturer WHERE m_name = @manufact), (SELECT Id FROM goods_categories WHERE category = @category), @price, @number, @descript
1
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
23.10.2014, 10:04  [ТС]
kodv, Всеравно создался метод, который не принимает manufacturer и category. Думаю, легче сделать для таблиц goods_categories и manufacturer методы, которые сделают селект id по полях m_name и category соответственно и будут возвращать мне id. Но как сгенерировать метод, который будет возвращать мне id и в который я смогу передать параметр я не знаю.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.10.2014, 10:15
o33ik, я сначла не понял, в чем проблема. Не стоит надеяться на механизмы генерации студии. Зайдите в коллекцию параметров и добавьте туда нужные параметры вручную.
1
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
23.10.2014, 10:25  [ТС]
kodv, а как это сделать? случайно не редактировать код, который сам генерируеться(airsoftDataSet в моем случае)? если да, то я пробовал там подстроить метод под свои нужды, но не получилось.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.10.2014, 10:28
o33ik, В свойствах вашего запроса (на ваших скринах справа снизу) есть коллекция Parameters. Выбиарете ее, открываете в редакторе и ... Далее все должно быть интуитивно понятно )
1
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
23.10.2014, 18:22  [ТС]
kodv, спасибо, сейчас попробую.

Добавлено через 6 минут
kodv, да, получилось. спасибо большое

Добавлено через 7 часов 40 минут
чтоб не создавать новую тему, хочу еще узнать как comboBox заполнить значениями из таблицы. Я написал селект для таблицы, который должен возвращать один столбец, только правильно его применить у меня не получилось.
На форме где у меняя comboBox есть tableAdaptor, bindingSourse нужной таблицы и dataSet.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.10.2014, 18:30
o33ik,
C#
1
2
3
comboBox.DataSource = bindingSource;
comboBox.DisplayMember = "Name"; // Отображаемое поле, например name
comboBox.ValueMember = "Id"; // Ключевое поле, например Id
Это же можно сделать из дизайнера. Кстати, SELECT лучше делать для двух столбцов, описанных мною выше.
1
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
23.10.2014, 18:44  [ТС]
kodv, о, намного легче чем я думал. спасибо
0
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 32
27.10.2014, 20:27
Здравствуйте! По контексту предпоследнего блока понимаю, что у меня аналогичная ситуация.
Есть 2 таблицы: Договор и Агент. При внесении данных в Договор необходимо внести код агента(т.е внешний ключ - индекс). Фамилия агента выбирается из ComboBox, при этом нужно получить код агента.
Вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
OleDbConnection connection = new OleDbConnection();
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Артем\Desktop\StrahowayaKompaniya.accdb;Persist Security Info=False";
 
            try
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();
            }
            catch
            {
                MessageBox.Show("Ошибка соединения", "Исключение", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
 
            OleDbCommand command = new OleDbCommand();
            command.CommandText = "SELECT kod_ag, fio FROM Agent";
            command.Connection = connection;
 
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command);
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet);
 
            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = dataSet.Tables[0];
 
            comboBox1.DataSource = bindingSource;
            comboBox1.DisplayMember = "fio";
            comboBox1.ValueMember = "kod_ag";
Написал, как показано в предыдущем примере, но при считывании SelectedItem и выводит:System.Data.DataRowView. Подскажите пожалуйста, что делаю не так? Заранее спасибо!)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
28.10.2014, 05:13
Цитата Сообщение от Morozow Посмотреть сообщение
но при считывании SelectedItem и выводит:System.Data.DataRowView
А что должен выводить? В смысле, выводится то, что вы и выводите. Если ComboBox привязан к данным, то каждый его элемент - это не строка, а DataRowView. Через свойство SelectedItem можно вытащить любое поле из строки данных:
C#
1
2
3
MessageBox.Show(((DataRowView)comboBox.SelectedItem)["fio"].ToString());
MessageBox.Show(((DataRowView)comboBox.SelectedItem)["kod_ag"].ToString());
MessageBox.Show(((DataRowView)comboBox.SelectedItem)["any_other_field"].ToString());
Но для того, чтобы достать ключевое значение (в вашем случае kod_ag), можно использовать свойство SelectedValue:
C#
1
MessageBox.Show(comboBox.SelectedValue.ToString());
1
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 32
28.10.2014, 07:05
Спасибо большое! Всё работает как надо)) Даже не думал, что у comboBox есть такие свойства, думал, что все надо будет решать двусвязанными списками, а тут все просто и удобно уже сделано. Спасибо вам)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2014, 07:05
Помогаю со студенческими работами здесь

Написать клиент-серверное приложение, где клиент должен отсылать запрос на сервер, а тот должен опрашивать БД
Здравствуйте, имею задачу, но не знаю как реализовать. Задача состоит в том чтобы написать клиент серверное приложение, клиент должен...

Не могу сделать insert, ошибка: В операции должен использоваться обновляемый запрос. /article/Upload2DBS.asp, line 84
Есть запрос sSQL = 'insert into Resourse(Name_resourse, ID_Lg, ID_cat, Comment) values('' & C_NAME & '','' & LANG & '','' & CAT...

Запрос Который Должен Заполнить Табличную Часть Документа
Доброго времени суток. Задание на этот раз такое: По кнопке «Заполнить» в табличную часть подбираются данные из регистра сведений...

Запрос Который Должен Заполнить Табличную Часть Документа
Доброго времени суток. Задание на этот раз такое: По кнопке «Заполнить» в табличную часть подбираются данные из регистра сведений...

Ошибка "в операции должен использоваться обновляемый запрос" при INSERT
Доброго, начал разбираться в базах и немного застрял, подскажите пожалуйста. База Paradox. База имеет три ячейки - Data, Summa, Opis. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru