Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sequence / 11 сообщений из 11, страница 1 из 1
06.06.2005, 13:43
    #33102559
-ant-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
Подскажите пожалуйста, как при вставке записи в БД ORACLE, вызвать для поля ID - sequence.nextval.
Запрос:
----------------------------------------------------
insert into tablename (id,name,nom,counter,year)
values (ND_SEQ_S.Nextval, 'Name 1',5,0,'05.06.2005')
----------------------------------------------------
Есть oledbdataadapter, dataset и datagrid.
InsertCommand
-----------------------------------------
INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR)
VALUES (ND_SEQ_S.NEXTVAL, ?, ?, ?, ?,)
------------------------------------------

При вставке предупреждает, что поле ID не может быть null. Как правильно написать?
...
Рейтинг: 0 / 0
09.06.2005, 16:39
    #33110097
Lyrene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
У тебя после последнего знака вопроса в insert-команде запятая лишняя, но проблема не из-за этого, наверное.

В книжке Дэвида Сеппы написано именно так, как ты пытаешься сделать. У меня тоже это сделать не получается, но выдает другую ошибку:
ORA-02291: нарушено ограничение (PGR.R_5) целостности - исходный ключ
не найден.

Тоже пока не знаю, что делать..
...
Рейтинг: 0 / 0
10.06.2005, 16:42
    #33112417
forlog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
Как вариант. Присваивать значение полю из sequence в триггере на таблице.
...
Рейтинг: 0 / 0
14.06.2005, 22:49
    #33116691
Andrew IF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
Код: plaintext
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.
28.
29.
30.
SQL> create sequence nd_seq_s;

Последовательность создана.

SQL> create table tablename (id number, name varchar2( 10 ));

Таблица создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'+');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'-');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'=');

 1  строка создана.

SQL> commit;

Фиксация обновлений завершена.

SQL> select * from tablename;

        ID NAME           
---------- ---------- 
          1  +                
          2  -   
          3  =
...
Рейтинг: 0 / 0
14.06.2005, 22:56
    #33116694
Andrew IF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
LyreneУ тебя после последнего знака вопроса в insert-команде запятая лишняя, но проблема не из-за этого, наверное.

В книжке Дэвида Сеппы написано именно так, как ты пытаешься сделать. У меня тоже это сделать не получается, но выдает другую ошибку:
ORA-02291: нарушено ограничение (PGR.R_5) целостности - исходный ключ
не найден.

Тоже пока не знаю, что делать..

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96525/e2100.htm

ORA-02291 integrity constraint (string.string) violated - parent key not foundCause: A foreign key value has no matching primary key value.Action: Delete the foreign key or add a matching primary key.
...
Рейтинг: 0 / 0
16.06.2005, 12:54
    #33119246
-ant-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
Andrew IF
Код: plaintext
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.
28.
29.
30.
SQL> create sequence nd_seq_s;

Последовательность создана.

SQL> create table tablename (id number, name varchar2( 10 ));

Таблица создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'+');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'-');

 1  строка создана.

SQL> insert into tablename (id, name) values (nd_seq_s.nextval,'=');

 1  строка создана.

SQL> commit;

Фиксация обновлений завершена.

SQL> select * from tablename;

        ID NAME           
---------- ---------- 
          1  +                
          2  -   
          3  =

--------------------------------------------
Кхе... вопрос не об этом.

Ошибка в передаче параметра - что-то вроде "Parametr[0] 'ID' has no default value".

Пробовал юзать ХП, но почему то она не видна в DataAdapter.
...
Рейтинг: 0 / 0
16.06.2005, 13:58
    #33119509
Lyrene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
А если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
...
Рейтинг: 0 / 0
16.06.2005, 13:59
    #33119510
Lyrene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
А если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
...
Рейтинг: 0 / 0
16.06.2005, 14:29
    #33119620
Роман Дынник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
лучше сиквенс отдельным запросом получать


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
17.06.2005, 13:13
    #33121713
-ant-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
LyreneА если отдельным запросом получить sequence.nextval и передать параметром в команду вставки? Вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.OleDb.OleDbCommand cmdGetID = new OleDbCommand("SELECT SEQ.NEXTVAL FROM DUAL", this.conn);
conn.Open();
int curID = Convert.ToInt16(cmdGetID.ExecuteScalar());
conn.Close();

// считаем, что параметры уже созданы и среди них есть параметр "ID"
this.DataAdapter.InsertCommand.Parameters["ID"].Value = curID;
this.DataAdapter.Update(DataSet, DataTable);

И тогда текст команды на вставку такой:

Код: plaintext
1.
this.DataAdapter.InsertCommand = new OleDbCommand("INSERT INTO TABLENAME
(ID, NAME, NOM, COUNTER, YEAR) VALUES (?, ?, ?, ?, ?)", this.conn);

У меня так работает.

2Andrew IF: спасибо, с ключом разобралась.
-----------------------------------------------------
Такая мысль меня посещала. Надо попробовать.
Хотя хотелось бы без выкрутасов. Есть компонент, значит должен работать.
Кроме того, при вызове сиквенса дополнительной командой, возможна потеря значения при неудавшемся инсерте.
...
Рейтинг: 0 / 0
18.06.2005, 19:59
    #33123252
Andrew IF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sequence
-ant-
Кроме того, при вызове сиквенса дополнительной командой, возможна потеря значения при неудавшемся инсерте.

А вам его жалко? Ну потеряется значение. Это же не ресурс какой-то. А для вставки в родительскую таблицу с последующей вставкой в дочерние, вообще, оптимальный вариант.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sequence / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]