Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
2 / 2 / 0
Регистрация: 14.09.2014
Сообщений: 82

Ошибка с view С# и базы данных SQL Server

05.04.2016, 21:33. Показов 4699. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ПОчему нельзя менять что-то в представлении???
У меня есть таблица тренеров в sql, в ней участвует айди специализации, надо вьюшкой вывести таблицу тренеров, где вместо айди специализации название.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE Specialization
(
[ID Specialization] INT IDENTITY(1,1),
[Name Specialization] VARCHAR(30) NOT NULL,
PRIMARY KEY ([ID Specialization])
)
 
CREATE TABLE Trainer
(
[ID Trainer] INT IDENTITY(20,1),
[ID Specialization] INT NOT NULL,
[Surname] VARCHAR(20) NOT NULL,
[Name] VARCHAR(20) NOT NULL,
[Price] INT NOT NULL,
PRIMARY KEY ([ID Trainer]),
FOREIGN KEY ([ID Specialization]) REFERENCES Specialization ([ID Specialization])
)
Создала вьюшку, работает:

SQL
1
2
3
4
CREATE VIEW TrainerTable
AS
SELECT [ID Trainer], [Name Specialization] AS Spec, [Surname], [Name], [Price] 
FROM [dbo].[Trainer] JOIN [dbo].[Specialization] ON [dbo].[Trainer].[ID Specialization] = [dbo].[Specialization].[ID Specialization]
Но когда я в проекте по визуализации базы пытаюсь внести изменения в таблицу появляются ошибки

Невозможно обновить представление или функцию "TrainerTable", так как изменение влияет на несколько базовых таблиц.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 
case "TrainerTable":
                    SqlConnection connect1 = new SqlConnection(ConnectionString);
                    command = new SqlCommand("UPDATE TrainerTable SET  Spec=@Spec, [Surname] = @Surname, [Name] = @Name, [Price] = @Price where [ID Trainer] = @IDTrainer", connect1);
                    command.Parameters.Add("@IDTrainer", SqlDbType.Int).SourceColumn = "ID Trainer";
                    command.Parameters.Add("@Spec", SqlDbType.NChar).SourceColumn = "Spec";
                    command.Parameters.Add("@Surname", SqlDbType.NChar).SourceColumn = "Surname";
                    command.Parameters.Add("@Name", SqlDbType.NChar).SourceColumn = "Name";
                    command.Parameters.Add("@Price", SqlDbType.Int).SourceColumn = "Price";
 
                    dataAdapter1.UpdateCommand = command;
                    dataAdapter1.Update(ds, "TrainerTable");
                    break;
Помогите разобраться....
Причем таблица выводится корректно, вот так:
C#
1
2
3
4
5
6
case "TrainerTable":
                     CommandText = "SELECT * FROM TrainerTable";
                        dataAdapter1 = new SqlDataAdapter(CommandText, ConnectionString);
                        dataAdapter1.Fill(ds, "TrainerTable");
                        dataGridView1.DataSource = ds.Tables["TrainerTable"].DefaultView;
                    break;
Еще надо триггер написать- если я в TrainerTable (вьюшка) - добавляю тренера и имя специализации нет в таблице специализации, то ошибка... пока не получается. Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.04.2016, 21:33
Ответы с готовыми решениями:

Ошибка при выводе данных из базы MS SQL Server
Доброе время суток! Пишу программу, которая должна из MS SQL Server вывести таблицу на экран. Но в конструкции @foreach (test b in Model)...

Ошибка создания базы данных в MS SQL server 2005
Здравствуйте, столкнулся с такой проблемой. Есть два файла mdf и ldf, скрипт sql и приложение на дельфи. /****** Object: Database...

Ошибка при восстановлении базы данных SQL Server 6.5
Подскажите как восстановить базу данных из файла. Пытаюсь это сделать следущим образом: USE My_Data RESTORE DATABASE My_Data FROM...

7
79 / 102 / 44
Регистрация: 12.05.2015
Сообщений: 476
06.04.2016, 02:18
Kris123, у вас немного не правильный подход. Представление (view) само не содержит каких-либо данных, суть его запрос который возвращает данные в более удобном для чтения виде, в вашем случае объединяет две таблицы. Соответственно, данные необходимо менять в базовых таблицах, а потом делать опять запрос на получение вьюхи, чтобы получить обновленные данные.
Я бы сделал таким образом. У вас есть базовая таблица [Trainer] и по сути справочник к этой таблице [Specialization]. На форме я добавил бы, допустим, кнопку "Добавить/изменить специализацию" и вызывал бы форму в которой мог бы редактировать эти данные. И вторую кнопку "Добавить/изменить тренера", там бы уже редактировал в соответствующей таблице данные. И после добавления или изменения тренера, просто бы обновлял DataSet и получал свежие данные по тренерам.
Ну или использовать хранимые процедуры.
0
2 / 2 / 0
Регистрация: 14.09.2014
Сообщений: 82
06.04.2016, 15:37  [ТС]
Как вы предлагаете не получится, я так делаю с таблицами, где нет FK, но в таблице Trainer есть, мне надо чтобы выводилось не ID специальности, а название специальности и изменять чтобы у тренеров я могла....
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
06.04.2016, 15:48
Цитата Сообщение от Kris123 Посмотреть сообщение
Еще надо триггер написать
Почитай про INSTEAD OF триггера
0
2 / 2 / 0
Регистрация: 14.09.2014
Сообщений: 82
06.04.2016, 16:17  [ТС]
я делала триггер-но это же просто ограничение.
я не понимаю как мне добавлять или изменять таблицу TrainerTable,ведь это представление.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
06.04.2016, 16:34
Цитата Сообщение от Kris123 Посмотреть сообщение
я делала триггер-но это же просто ограничение
Триггер - это не ограничение, это процедура, запускаемая при каком-то событии (например, при INSERT или UPDATE в таблицу). INSTEAD OF триггера вешаются на представление, чтобы заменить операцию (тот же UPDATE) для представления на операции к конкретным таблицам.
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
06.04.2016, 16:48
Цитата Сообщение от Kris123 Посмотреть сообщение
Невозможно обновить представление или функцию "TrainerTable", так как изменение влияет на несколько базовых таблиц.
Читаем до полного просветления
0
2 / 2 / 0
Регистрация: 14.09.2014
Сообщений: 82
06.04.2016, 20:22  [ТС]
Всем спасибо, разобралась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2016, 20:22
Помогаю со студенческими работами здесь

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

Ошибка подключения при переводе Базы данных из SQL SERVER в Mysql
Второй день пытаюсь перевести базу из SQL SERVER на Mysql через Workbench. :wall: Оба сервера запущены. Использую : Database ->...

Ошибка при подключении таблицы базы данных SQL Server в Intellij IDEA
Доброго времени суток! При настройке подключения к базе данных "MyShop" на SQL Server в плагине Intellij IDEA Database Navigator: 1)...

Базы данных SQL Server и C#
Всем добрый вечер. Интересует создание баз данных и работа с ними на c#.Я вообще не имею представления никакого как это делается...Обычно...

Создание пустой базы данных и импорт данных в sql server 2000
Установила sql server 2000 home edition на локальный компьютер. Стоят три вопроса. Первое это как создать пустую базу данных в нем. Второе-...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru