InsertCommand для двух таблиц
От: wolfstain3d  
Дата: 24.04.11 18:18
Оценка:
Здравствуйте,пишу на C#, имеется бд Oracle с суррогатными ключами.
Пример двух таблиц:
CREATE TABLE Classes(
  classID NUMBER(*,0),
  grade VARCHAR2(10) UNIQUE NOT NULL,
  CONSTRAINT Classes_pk PRIMARY KEY (classID)
);
CREATE TABLE StudWorkload(
  classID NUMBER(*,0),
  hoursPerWeek NUMBER NOT NULL,
  CONSTRAINT StudWorkload_pk PRIMARY KEY (classID),
  CONSTRAINT StudWorkload_fk_classID FOREIGN KEY (classID) REFERENCES Classes(classID)
);


Ключи генерируются автоматически и пользователь на уровне приложения (C#) дожлен видеть в таблице StudWorkload поле класса а не id класса, для полноценной работы с ним. Использую DataGridView. Для полноценной работы ему нужны selectCommand,insertCommand,updateCommand,deleteCommand в TableAdapter, находящимся в DataSet.
Вот например команды для selecta и удаления:
SELECT     CLASSES.GRADE, STUDWORKLOAD.HOURSPERWEEK
FROM         STUDWORKLOAD, CLASSES
WHERE     STUDWORKLOAD.CLASSID = CLASSES.CLASSID

DELETE FROM STUDWORKLOAD
WHERE     (CLASSID IN      (SELECT     CLASSID
                            FROM          STUDENTS
                            WHERE      (FIO = :FIO))) 
                                                        AND (HOURSPERWEEK = :HOURSPERWEEK)


Возникла проблема с параметром добавления в InsertCommand, по идее, для таблицы STUDWORKLOAD генерируется так:
INSERT INTO STUDWORKLOAD
                      (CLASSID, HOURSPERWEEK)
VALUES     (:CLASSID, :HOURSPERWEEK)


Но так как в данных у меня GRADE и HOURSPERWEEK нужно что-то типа этого:
INSERT INTO STUDWORKLOAD
                      (CLASSID, HOURSPERWEEK)
SELECT     CLASSES.CLASSID, :HOURSPERWEEK AS EXPR1
FROM         CLASSES, STUDWORKLOAD ST
WHERE     (CLASSES.GRADE = :GRADE)


DataGridView не цепляет этот InsertCommand, думаю из-за того что параметр :HOURSPERWEEK расположен не там где нужно, Как сделать нормальный insertCommand, чтобы его подхватывал DataGridView? И если это невозможно, то какое элегантное решение на С# с импользованием каких компонентов существует для этого? (структуру таблиц и ключей менять нельзя так как таблиц больше и могу начаться проблемы если портить 3 нормальную форму)
insertcommand datagridview tableadapter параметр несколько таблиц
Re: InsertCommand для двух таблиц
От: wolfstain3d  
Дата: 24.04.11 18:27
Оценка:
А вообще,я тут подумал что использовать INSER ... SELECT не получится так как нет данных с которыми нужно сравнивать... т.е. параметры не привязать к запросу, вопрос открыт...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.